ordering-ui-react-native 0.18.2 → 0.18.3-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 (263) hide show
  1. package/package.json +9 -7
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessInformation/index.tsx +10 -9
  4. package/src/components/BusinessesListing/index.tsx +1 -1
  5. package/src/components/OrderCreating/index.tsx +0 -20
  6. package/src/components/PaymentOptionsWebView/index.tsx +29 -8
  7. package/src/components/PhoneInputNumber/index.tsx +6 -2
  8. package/src/components/StripeMethodForm/index.tsx +136 -102
  9. package/src/components/VerifyPhone/styles.tsx +1 -2
  10. package/src/components/shared/OToast.tsx +3 -2
  11. package/src/types/index.tsx +5 -0
  12. package/src/utils/index.tsx +7 -2
  13. package/themes/business/index.tsx +2 -0
  14. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +36 -26
  15. package/themes/business/src/components/BusinessController/index.tsx +19 -17
  16. package/themes/business/src/components/BusinessProductList/AccordionDropdown.tsx +63 -0
  17. package/themes/business/src/components/BusinessProductList/IterateCategories.tsx +108 -0
  18. package/themes/business/src/components/BusinessProductList/ProductList.tsx +196 -0
  19. package/themes/business/src/components/BusinessProductList/index.tsx +196 -0
  20. package/themes/business/src/components/BusinessProductList/styles.tsx +10 -0
  21. package/themes/business/src/components/Chat/index.tsx +163 -123
  22. package/themes/business/src/components/DriverMap/index.tsx +17 -6
  23. package/themes/business/src/components/DriverSchedule/index.tsx +45 -8
  24. package/themes/business/src/components/FloatingButton/index.tsx +34 -31
  25. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  26. package/themes/business/src/components/LoginForm/index.tsx +5 -2
  27. package/themes/business/src/components/MapView/index.tsx +14 -10
  28. package/themes/business/src/components/MessagesOption/index.tsx +22 -94
  29. package/themes/business/src/components/NewOrderNotification/index.tsx +123 -96
  30. package/themes/business/src/components/NotFoundSource/index.tsx +2 -2
  31. package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
  32. package/themes/business/src/components/OrderDetails/Delivery.tsx +205 -12
  33. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +67 -39
  34. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +47 -23
  35. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +9 -4
  36. package/themes/business/src/components/OrderMessage/index.tsx +1 -1
  37. package/themes/business/src/components/OrderSummary/index.tsx +114 -123
  38. package/themes/business/src/components/OrdersListManager/index.tsx +7 -2
  39. package/themes/business/src/components/OrdersListManager/utils.tsx +1 -1
  40. package/themes/business/src/components/OrdersOption/index.tsx +43 -32
  41. package/themes/business/src/components/PreviousMessages/FooterMessageComponent.tsx +103 -0
  42. package/themes/business/src/components/PreviousMessages/index.tsx +97 -55
  43. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +21 -29
  44. package/themes/business/src/components/PreviousOrders/OrderList.tsx +93 -0
  45. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +1 -1
  46. package/themes/business/src/components/PreviousOrders/index.tsx +193 -221
  47. package/themes/business/src/components/PreviousOrders/styles.tsx +10 -0
  48. package/themes/business/src/components/ReviewCustomer/index.tsx +3 -1
  49. package/themes/business/src/components/SearchBar/index.tsx +2 -1
  50. package/themes/business/src/components/StoresList/index.tsx +6 -5
  51. package/themes/business/src/components/UserProfileForm/index.tsx +14 -15
  52. package/themes/business/src/components/WebsocketStatus/index.tsx +171 -0
  53. package/themes/business/src/components/WebsocketStatus/styles.tsx +28 -0
  54. package/themes/business/src/components/shared/OModal.tsx +16 -9
  55. package/themes/business/src/types/index.tsx +8 -0
  56. package/themes/business/src/utils/index.tsx +4 -4
  57. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  58. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  59. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  60. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  61. package/themes/kiosk/src/components/Intro/index.tsx +16 -1
  62. package/themes/kiosk/src/components/LoginForm/index.tsx +7 -5
  63. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  64. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  65. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  66. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +2 -2
  67. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  68. package/themes/original/index.tsx +7 -3
  69. package/themes/original/src/components/AddressDetails/index.tsx +19 -3
  70. package/themes/original/src/components/AddressForm/index.tsx +33 -15
  71. package/themes/original/src/components/AddressForm/styles.tsx +1 -1
  72. package/themes/original/src/components/AddressList/index.tsx +5 -8
  73. package/themes/original/src/components/AddressList/styles.tsx +4 -4
  74. package/themes/original/src/components/AnalyticsSegment/index.tsx +193 -10
  75. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  76. package/themes/original/src/components/AppleLogin/styles.tsx +3 -1
  77. package/themes/original/src/components/BusinessBasicInformation/index.tsx +74 -38
  78. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +11 -13
  79. package/themes/original/src/components/BusinessController/index.tsx +35 -44
  80. package/themes/original/src/components/BusinessController/styles.tsx +12 -5
  81. package/themes/original/src/components/BusinessFeaturedController/index.tsx +21 -54
  82. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +8 -0
  83. package/themes/original/src/components/BusinessInformation/index.tsx +140 -85
  84. package/themes/original/src/components/BusinessInformation/styles.tsx +2 -2
  85. package/themes/original/src/components/BusinessItemAccordion/index.tsx +25 -26
  86. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +317 -0
  87. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +96 -0
  88. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +1 -1
  89. package/themes/original/src/components/BusinessListingSearch/index.tsx +133 -438
  90. package/themes/original/src/components/BusinessListingSearch/styles.tsx +1 -19
  91. package/themes/original/src/components/BusinessPreorder/index.tsx +105 -22
  92. package/themes/original/src/components/BusinessPreorder/styles.tsx +14 -0
  93. package/themes/original/src/components/BusinessProductsCategories/index.tsx +2 -3
  94. package/themes/original/src/components/BusinessProductsList/index.tsx +15 -7
  95. package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
  96. package/themes/original/src/components/BusinessProductsListing/UpsellingRedirect.tsx +1 -1
  97. package/themes/original/src/components/BusinessProductsListing/index.tsx +162 -39
  98. package/themes/original/src/components/BusinessProductsListing/styles.tsx +4 -5
  99. package/themes/original/src/components/BusinessReviews/index.tsx +4 -2
  100. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  101. package/themes/original/src/components/BusinessesListing/Layout/Appointment/styles.tsx +5 -5
  102. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListFooter.tsx +69 -0
  103. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListHeader.tsx +406 -0
  104. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListing.tsx +76 -0
  105. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +37 -404
  106. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
  107. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  108. package/themes/original/src/components/Cart/index.tsx +49 -47
  109. package/themes/original/src/components/CartContent/index.tsx +99 -38
  110. package/themes/original/src/components/CartContent/styles.tsx +6 -6
  111. package/themes/original/src/components/CartStoresListing/styles.tsx +2 -2
  112. package/themes/original/src/components/Checkout/index.tsx +324 -43
  113. package/themes/original/src/components/Checkout/styles.tsx +17 -0
  114. package/themes/original/src/components/CitiesControl/index.tsx +1 -1
  115. package/themes/original/src/components/CitiesControl/styles.tsx +1 -1
  116. package/themes/original/src/components/CouponControl/index.tsx +10 -3
  117. package/themes/original/src/components/DatePicker/index.tsx +17 -0
  118. package/themes/original/src/components/DatePicker/styles.tsx +20 -0
  119. package/themes/original/src/components/DriverTips/index.tsx +6 -3
  120. package/themes/original/src/components/FacebookLogin/styles.tsx +3 -1
  121. package/themes/original/src/components/Favorite/index.tsx +4 -9
  122. package/themes/original/src/components/Favorite/styles.tsx +0 -2
  123. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  124. package/themes/original/src/components/GPSButton/index.tsx +7 -5
  125. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +8 -3
  126. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +42 -5
  127. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +3 -1
  128. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +84 -8
  129. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +1 -1
  130. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +1 -1
  131. package/themes/original/src/components/GoogleLogin/styles.tsx +1 -1
  132. package/themes/original/src/components/GoogleMap/index.tsx +63 -7
  133. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
  134. package/themes/original/src/components/HighestRatedBusinesses/styles.tsx +1 -1
  135. package/themes/original/src/components/Home/index.tsx +14 -5
  136. package/themes/original/src/components/LastOrder/index.tsx +2 -1
  137. package/themes/original/src/components/LastOrders/index.tsx +2 -1
  138. package/themes/original/src/components/LoginForm/Otp/index.tsx +91 -25
  139. package/themes/original/src/components/LoginForm/index.tsx +64 -34
  140. package/themes/original/src/components/LottieAnimation/index.tsx +88 -63
  141. package/themes/original/src/components/MessageListing/index.tsx +9 -2
  142. package/themes/original/src/components/Messages/index.tsx +15 -4
  143. package/themes/original/src/components/Messages/styles.tsx +1 -1
  144. package/themes/original/src/components/MomentOption/index.tsx +9 -10
  145. package/themes/original/src/components/MomentSelector/index.tsx +1 -1
  146. package/themes/original/src/components/MultiCart/index.tsx +1 -1
  147. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +161 -49
  148. package/themes/original/src/components/MultiCheckout/index.tsx +348 -70
  149. package/themes/original/src/components/MultiCheckout/styles.tsx +3 -1
  150. package/themes/original/src/components/MultiOrdersDetails/index.tsx +2 -2
  151. package/themes/original/src/components/MyOrders/index.tsx +16 -5
  152. package/themes/original/src/components/NavBar/index.tsx +20 -13
  153. package/themes/original/src/components/NetworkError/index.tsx +2 -3
  154. package/themes/original/src/components/NetworkError/styles.tsx +2 -2
  155. package/themes/original/src/components/NotFoundSource/index.tsx +14 -10
  156. package/themes/original/src/components/Notifications/index.tsx +4 -8
  157. package/themes/original/src/components/Notifications/styles.tsx +0 -1
  158. package/themes/original/src/components/OrderDetails/OrderEta.tsx +76 -0
  159. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +22 -6
  160. package/themes/original/src/components/OrderDetails/index.tsx +721 -670
  161. package/themes/original/src/components/OrderDetails/styles.tsx +24 -8
  162. package/themes/original/src/components/OrderItAgain/index.tsx +3 -1
  163. package/themes/original/src/components/OrderProgress/index.tsx +34 -25
  164. package/themes/original/src/components/OrderProgress/styles.tsx +1 -1
  165. package/themes/original/src/components/OrderSummary/index.tsx +62 -57
  166. package/themes/original/src/components/OrderTypeSelector/index.tsx +5 -6
  167. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/styles.tsx +1 -1
  168. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +13 -13
  169. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/styles.tsx +1 -1
  170. package/themes/original/src/components/OrdersOption/index.tsx +44 -21
  171. package/themes/original/src/components/OrdersOption/styles.tsx +2 -2
  172. package/themes/original/src/components/PageBanner/index.tsx +65 -29
  173. package/themes/original/src/components/PageBanner/styles.tsx +0 -3
  174. package/themes/original/src/components/PaymentOptionCard/index.tsx +180 -0
  175. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +3 -0
  176. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  177. package/themes/original/src/components/PaymentOptions/index.tsx +100 -34
  178. package/themes/original/src/components/PhoneInputNumber/index.tsx +18 -4
  179. package/themes/original/src/components/ProductForm/ActionButton.tsx +120 -0
  180. package/themes/original/src/components/ProductForm/ExtraOptions.tsx +56 -0
  181. package/themes/original/src/components/ProductForm/index.tsx +106 -170
  182. package/themes/original/src/components/ProductForm/styles.tsx +3 -3
  183. package/themes/original/src/components/ProductItemAccordion/index.tsx +13 -6
  184. package/themes/original/src/components/ProductOptionSubOption/index.tsx +49 -20
  185. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +10 -9
  186. package/themes/original/src/components/ProfessionalProfile/styles.tsx +3 -3
  187. package/themes/original/src/components/Promotions/index.tsx +6 -6
  188. package/themes/original/src/components/Promotions/styles.tsx +3 -3
  189. package/themes/original/src/components/ReviewDriver/styles.tsx +1 -1
  190. package/themes/original/src/components/ReviewOrder/styles.tsx +1 -1
  191. package/themes/original/src/components/ReviewProducts/index.tsx +16 -7
  192. package/themes/original/src/components/ReviewProducts/styles.tsx +1 -1
  193. package/themes/original/src/components/ScheduleAccordion/index.tsx +3 -3
  194. package/themes/original/src/components/ServiceForm/index.tsx +2 -2
  195. package/themes/original/src/components/ServiceForm/styles.tsx +4 -4
  196. package/themes/original/src/components/SignupForm/index.tsx +27 -16
  197. package/themes/original/src/components/SingleOrderCard/index.tsx +44 -20
  198. package/themes/original/src/components/SingleOrderCard/styles.tsx +1 -1
  199. package/themes/original/src/components/SingleProductCard/index.tsx +13 -10
  200. package/themes/original/src/components/SingleProductCard/styles.tsx +8 -3
  201. package/themes/original/src/components/SingleProductReview/styles.tsx +1 -1
  202. package/themes/original/src/components/StripeCardsList/index.tsx +61 -5
  203. package/themes/original/src/components/StripeElementsForm/index.tsx +48 -34
  204. package/themes/original/src/components/StripeElementsForm/naked.tsx +12 -1
  205. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +170 -0
  206. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +86 -0
  207. package/themes/original/src/components/UpsellingProducts/index.tsx +16 -205
  208. package/themes/original/src/components/UpsellingProducts/styles.tsx +19 -0
  209. package/themes/original/src/components/UserDetails/index.tsx +3 -1
  210. package/themes/original/src/components/UserFormDetails/index.tsx +100 -22
  211. package/themes/original/src/components/UserFormDetails/styles.tsx +1 -1
  212. package/themes/original/src/components/UserProfile/index.tsx +8 -26
  213. package/themes/original/src/components/UserProfileForm/index.tsx +30 -31
  214. package/themes/original/src/components/UserVerification/index.tsx +55 -50
  215. package/themes/original/src/components/WalletTransactionItem/index.tsx +2 -2
  216. package/themes/original/src/components/WalletTransactions/index.tsx +3 -3
  217. package/themes/original/src/components/WalletTransactions/styles.tsx +1 -0
  218. package/themes/original/src/components/Wallets/index.tsx +48 -60
  219. package/themes/original/src/components/Wallets/styles.tsx +3 -4
  220. package/themes/original/src/components/shared/HeaderTitle.tsx +1 -1
  221. package/themes/original/src/components/shared/OButton.tsx +3 -3
  222. package/themes/original/src/components/shared/OInput.tsx +4 -5
  223. package/themes/original/src/components/shared/OModal.tsx +15 -17
  224. package/themes/original/src/layouts/Container.tsx +5 -3
  225. package/themes/original/src/types/index.tsx +28 -6
  226. package/themes/original/src/utils/index.tsx +180 -13
  227. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
  228. package/src/navigators/BottomNavigator.tsx +0 -117
  229. package/src/navigators/CheckoutNavigator.tsx +0 -66
  230. package/src/navigators/HomeNavigator.tsx +0 -202
  231. package/src/navigators/NavigationRef.tsx +0 -7
  232. package/src/navigators/RootNavigator.tsx +0 -269
  233. package/src/pages/Account.tsx +0 -34
  234. package/src/pages/AddressForm.tsx +0 -62
  235. package/src/pages/AddressList.tsx +0 -24
  236. package/src/pages/BusinessProductsList.tsx +0 -81
  237. package/src/pages/BusinessesListing.tsx +0 -43
  238. package/src/pages/CartList.tsx +0 -49
  239. package/src/pages/Checkout.tsx +0 -101
  240. package/src/pages/ForgotPassword.tsx +0 -24
  241. package/src/pages/Help.tsx +0 -23
  242. package/src/pages/HelpAccountAndPayment.tsx +0 -23
  243. package/src/pages/HelpGuide.tsx +0 -23
  244. package/src/pages/HelpOrder.tsx +0 -23
  245. package/src/pages/Home.tsx +0 -36
  246. package/src/pages/IntroductoryTutorial.tsx +0 -170
  247. package/src/pages/Login.tsx +0 -47
  248. package/src/pages/MomentOption.tsx +0 -30
  249. package/src/pages/MultiCheckout.tsx +0 -31
  250. package/src/pages/MultiOrdersDetails.tsx +0 -27
  251. package/src/pages/MyOrders.tsx +0 -40
  252. package/src/pages/NetworkError.tsx +0 -24
  253. package/src/pages/NotFound.tsx +0 -22
  254. package/src/pages/OrderDetails.tsx +0 -25
  255. package/src/pages/ProductDetails.tsx +0 -55
  256. package/src/pages/Profile.tsx +0 -36
  257. package/src/pages/ReviewDriver.tsx +0 -30
  258. package/src/pages/ReviewOrder.tsx +0 -32
  259. package/src/pages/ReviewProducts.tsx +0 -30
  260. package/src/pages/Sessions.tsx +0 -22
  261. package/src/pages/Signup.tsx +0 -53
  262. package/src/pages/SpinnerLoader.tsx +0 -10
  263. package/src/pages/Splash.tsx +0 -21
@@ -2,6 +2,6 @@ import styled from 'styled-components/native'
2
2
 
3
3
  export const ListWrapper = styled.View`
4
4
  background-color: ${(props: any) => props.theme.colors.backgroundLight};
5
- padding-horizontal: 40px;
5
+ padding-horizontal: 20px;
6
6
  padding-top: 30px;
7
7
  `;
@@ -1,5 +1,5 @@
1
- import React from 'react';
2
- import { useLanguage, useOrder } from 'ordering-components/native';
1
+ import React, { useEffect } from 'react';
2
+ import { useLanguage, useOrder, useConfig } from 'ordering-components/native';
3
3
  import { useTheme } from 'styled-components/native';
4
4
  import { StyleSheet, View } from 'react-native';
5
5
  import { OButton, OIcon, OText } from '../shared';
@@ -8,12 +8,21 @@ import { TouchableOpacity } from 'react-native-gesture-handler';
8
8
  import { useWindowDimensions, Platform } from 'react-native';
9
9
 
10
10
  export const Home = (props: any) => {
11
- const { onNavigationRedirect } = props;
11
+ const { onNavigationRedirect, businessSlug } = props;
12
12
  const { width, height } = useWindowDimensions();
13
13
  const [, t] = useLanguage();
14
14
  const [orderState] = useOrder();
15
+ const [{ configs }] = useConfig()
15
16
 
16
17
  const theme = useTheme();
18
+ const unaddressedTypes = configs?.unaddressed_order_types_allowed?.value.split('|').map((value: any) => Number(value)) || []
19
+ const isAllowUnaddressOrderType = unaddressedTypes.includes(orderState?.options?.type)
20
+
21
+ useEffect(() => {
22
+ if (isAllowUnaddressOrderType) {
23
+ onNavigationRedirect(!!businessSlug ? 'Business' : 'BusinessList')
24
+ }
25
+ }, [isAllowUnaddressOrderType])
17
26
 
18
27
  return (
19
28
  <View style={styles.container}>
@@ -60,7 +69,7 @@ export const Home = (props: any) => {
60
69
  style={{ ...styles.textLink, marginTop: 12 }}
61
70
  onPress={() =>
62
71
  orderState?.options?.address?.address
63
- ? onNavigationRedirect('BusinessList', { isGuestUser: true })
72
+ ? onNavigationRedirect(!!businessSlug ? 'Business' : 'BusinessList', { isGuestUser: true })
64
73
  : onNavigationRedirect('AddressForm', { isGuestUser: true })
65
74
  }>
66
75
  <OText weight="normal" size={18} color={theme.colors.white}>
@@ -83,7 +92,7 @@ const styles = StyleSheet.create({
83
92
  flex: 1,
84
93
  alignItems: 'center',
85
94
  justifyContent: 'space-between',
86
- paddingHorizontal: 40,
95
+ paddingHorizontal: 20,
87
96
  },
88
97
  logo: {
89
98
  marginTop: 64,
@@ -129,7 +129,8 @@ export const LastOrder = (props: OrdersOptionParams) => {
129
129
  initialPage: 1,
130
130
  pageSize: 3,
131
131
  controlType: 'infinity'
132
- }
132
+ },
133
+ noGiftCardOrders: true
133
134
  }
134
135
 
135
136
  return <OrderList {...MyOrdersProps} />
@@ -117,7 +117,8 @@ export const LastOrders = (props: any) => {
117
117
  initialPage: 1,
118
118
  pageSize: 3,
119
119
  controlType: 'infinity'
120
- }
120
+ },
121
+ noGiftCardOrders: true
121
122
  }
122
123
  return <OrderListController {...helpProps} />
123
124
  }
@@ -1,22 +1,27 @@
1
- import React, { useEffect, useState } from 'react'
1
+ import React, { useEffect, useRef, useState } from 'react'
2
2
  import { formatSeconds } from '../../../utils'
3
- import { StyleSheet, TouchableOpacity } from 'react-native';
3
+ import { StyleSheet, TouchableOpacity, View, SafeAreaView } 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
- import { OText, OButton } from '../../shared';
8
- import OtpInputs from 'react-native-otp-inputs';
7
+ import { OText, OButton, OIcon } from '../../shared';
8
+ import OtpInputs, { OtpInputsRef } from 'react-native-otp-inputs';
9
9
  import { useTheme } from 'styled-components/native';
10
10
  import { otpParams } from '../../../types'
11
+ import { ActivityIndicator } from 'react-native';
11
12
 
12
13
  export const Otp = (props: otpParams) => {
13
14
  const {
15
+ pinCount,
16
+ otpError,
17
+ setOtpError,
18
+ setAlertState,
14
19
  willVerifyOtpState,
20
+ isCheckingCode,
21
+ setCheckingCode,
15
22
  setWillVerifyOtpState,
16
- onSubmit,
17
23
  handleLoginOtp,
18
- setAlertState,
19
- pinCount
24
+ onSubmit,
20
25
  } = props
21
26
 
22
27
  const theme = useTheme();
@@ -24,8 +29,7 @@ export const Otp = (props: otpParams) => {
24
29
  const [otpLeftTime, _, resetOtpLeftTime]: any = useCountdownTimer(
25
30
  600, willVerifyOtpState)
26
31
 
27
- const [code, setCode] = useState('')
28
-
32
+ const inputRef = useRef<OtpInputsRef | any>(null)
29
33
 
30
34
  const handleOnSubmit = () => {
31
35
  setAlertState({
@@ -36,6 +40,21 @@ export const Otp = (props: otpParams) => {
36
40
  onSubmit()
37
41
  }
38
42
 
43
+ const handleChangeCode = (code : string) => {
44
+ if (code?.length === pinCount) {
45
+ setCheckingCode(true)
46
+ handleLoginOtp(code)
47
+ inputRef.current?.reset && inputRef.current.reset()
48
+ setTimeout(() => inputRef.current?.focus && inputRef.current.focus(), 100)
49
+ }
50
+ setOtpError(null)
51
+ }
52
+
53
+ const handleCloseOtp = () => {
54
+ setWillVerifyOtpState(false)
55
+ setOtpError(null)
56
+ }
57
+
39
58
  useEffect(() => {
40
59
  if (otpLeftTime === 0) {
41
60
  setAlertState({
@@ -46,12 +65,6 @@ export const Otp = (props: otpParams) => {
46
65
  }
47
66
  }, [otpLeftTime])
48
67
 
49
- useEffect(() => {
50
- if (code?.length === (pinCount || 6)) {
51
- handleLoginOtp(code)
52
- }
53
- }, [code])
54
-
55
68
  const loginStyle = StyleSheet.create({
56
69
  container: {
57
70
  width: '100%',
@@ -73,28 +86,77 @@ export const Otp = (props: otpParams) => {
73
86
  color: theme.colors.primary,
74
87
  fontSize: 16
75
88
  },
89
+ wrapperIcon: {
90
+ alignItems: 'center',
91
+ justifyContent: 'center',
92
+ paddingRight: 20
93
+ },
94
+ closeContainer: {
95
+ width: '100%',
96
+ flexDirection: 'row',
97
+ alignItems: 'center'
98
+ },
99
+ checkingCode: {
100
+ height: 50,
101
+ width: '100%',
102
+ marginVertical: 30,
103
+ justifyContent: 'center',
104
+ alignItems: 'center'
105
+ }
76
106
  });
77
107
 
78
108
  return (
79
- <>
109
+ <SafeAreaView style={{ flex: 1, backgroundColor: theme.colors.backgroundPage }}>
80
110
  <OTPContainer>
111
+ <View
112
+ style={loginStyle.closeContainer}>
113
+ <TouchableOpacity onPress={() => handleCloseOtp()} style={loginStyle.wrapperIcon}>
114
+ <OIcon
115
+ src={theme.images.general.close}
116
+ width={22}
117
+ />
118
+ </TouchableOpacity>
119
+ <OText size={22}>
120
+ {t('ENTER_VERIFICATION_CODE', 'Enter verification code')}
121
+ </OText>
122
+ </View>
81
123
  <OText size={24}>
82
124
  {formatSeconds(otpLeftTime)}
83
125
  </OText>
84
- <OtpInputs
85
- autofillFromClipboard
86
- numberOfInputs={pinCount || 6}
87
- style={loginStyle.container}
88
- inputStyles={loginStyle.underlineStyleBase}
89
- handleChange={setCode}
90
- />
126
+ {isCheckingCode && (
127
+ <View style={loginStyle.checkingCode}>
128
+ <OText size={18}>
129
+ <ActivityIndicator size="large" color={theme.colors.primary} />
130
+ </OText>
131
+ </View>
132
+ )}
133
+ {!isCheckingCode && (
134
+ <OtpInputs
135
+ ref={inputRef}
136
+ autofillFromClipboard={false}
137
+ numberOfInputs={pinCount}
138
+ style={loginStyle.container}
139
+ returnKeyType={'done'}
140
+ inputStyles={loginStyle.underlineStyleBase}
141
+ handleChange={handleChangeCode}
142
+ />
143
+ )}
144
+ {!!otpError && (
145
+ <OText
146
+ color={theme?.colors?.error}
147
+ size={20}
148
+ mBottom={10}
149
+ >
150
+ {t(otpError, otpError)}
151
+ </OText>
152
+ )}
91
153
  <TouchableOpacity onPress={() => handleOnSubmit()} disabled={otpLeftTime > 520}>
92
154
  <OText size={16} mBottom={30} color={otpLeftTime > 520 ? theme.colors.disabled : theme.colors.primary}>
93
155
  {t('RESEND_CODE', 'Resend code')}
94
156
  </OText>
95
157
  </TouchableOpacity>
96
158
  <OButton
97
- onClick={() => setWillVerifyOtpState(false)}
159
+ onClick={() => handleCloseOtp()}
98
160
  bgColor={theme.colors.white}
99
161
  borderColor={theme.colors.primary}
100
162
  textStyle={{ color: theme.colors.primary }}
@@ -102,6 +164,10 @@ export const Otp = (props: otpParams) => {
102
164
  text={t('CANCEL', 'Cancel')}
103
165
  />
104
166
  </OTPContainer>
105
- </>
167
+ </SafeAreaView>
106
168
  )
107
169
  }
170
+
171
+ Otp.defaultProps = {
172
+ pinCount: 6
173
+ }
@@ -1,11 +1,12 @@
1
1
  import React, { useEffect, useState, useRef } from 'react';
2
- import { StyleSheet, View, Keyboard, Vibration } from 'react-native';
2
+ import { StyleSheet, View, Keyboard, Modal } 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';
6
6
  import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';
7
7
  import Recaptcha from 'react-native-recaptcha-that-works'
8
8
  import ReCaptcha from '@fatnlazycat/react-native-recaptcha-v3'
9
+ import ReactNativeHapticFeedback from "react-native-haptic-feedback";
9
10
 
10
11
  import {
11
12
  LoginForm as LoginFormController,
@@ -72,6 +73,7 @@ const LoginFormUI = (props: LoginParams) => {
72
73
  generateOtpCode,
73
74
  useLoginOtpEmail,
74
75
  useLoginOtpCellphone,
76
+ isGuest
75
77
  } = props;
76
78
 
77
79
  const [, { showToast }] = useToast();
@@ -95,12 +97,15 @@ const LoginFormUI = (props: LoginParams) => {
95
97
  const [recaptchaVerified, setRecaptchaVerified] = useState(false)
96
98
  const [alertState, setAlertState] = useState({ open: false, title: '', content: [] })
97
99
  const [tabLayouts, setTabLayouts] = useState<any>({})
100
+ const [otpError, setOtpError] = useState(null)
98
101
  const tabsRef = useRef<any>(null)
99
102
  const enabledPoweredByOrdering = configs?.powered_by_ordering_module?.value
100
103
  const theme = useTheme();
101
104
  const isOtpEmail = loginTab === 'otp' && otpType === 'email'
102
105
  const isOtpCellphone = loginTab === 'otp' && otpType === 'cellphone'
103
106
 
107
+ const [isCheckingCode, setCheckingCode] = useState(false)
108
+
104
109
  const googleLoginEnabled = configs?.google_login_enabled?.value === '1' || !configs?.google_login_enabled?.enabled
105
110
  const facebookLoginEnabled = configs?.facebook_login_enabled?.value === '1' || !configs?.facebook_login_enabled?.enabled
106
111
  const appleLoginEnabled = configs?.apple_login_enabled?.value === '1' || !configs?.apple_login_enabled?.enabled
@@ -160,12 +165,24 @@ const LoginFormUI = (props: LoginParams) => {
160
165
  handleCategoryScroll(otpType ? `${val}_${otpType}` : val)
161
166
  };
162
167
 
168
+ const vibrateApp = (impact?: string) => {
169
+ const options = {
170
+ enableVibrateFallback: true,
171
+ ignoreAndroidSystemSettings: false
172
+ };
173
+ ReactNativeHapticFeedback.trigger(impact || "impactLight", options);
174
+ }
175
+
163
176
  const onSubmit = (values?: any) => {
164
177
  Keyboard.dismiss();
165
178
  if (loginTab === 'otp') {
166
179
  if (phoneInputData.error && (loginTab !== 'otp' || (otpType === 'cellphone' && loginTab === 'otp'))) {
167
180
  showToast(ToastType.Error, t('INVALID_PHONE_NUMBER', 'Invalid phone number'));
168
- Vibration.vibrate()
181
+ vibrateApp()
182
+ return
183
+ }
184
+ if (otpType === 'cellphone' && phoneInputData?.error && !phoneInputData?.phone?.cellphone) {
185
+ showToast(ToastType.Error, t('PHONE_NUMBER_REQUIRED', 'Phone number is required'));
169
186
  return
170
187
  }
171
188
  if (loginTab === 'otp') {
@@ -178,7 +195,7 @@ const LoginFormUI = (props: LoginParams) => {
178
195
  } else {
179
196
  if (phoneInputData.error) {
180
197
  showToast(ToastType.Error, phoneInputData.error);
181
- Vibration.vibrate()
198
+ vibrateApp()
182
199
  return;
183
200
  }
184
201
  handleButtonLoginClick({
@@ -191,7 +208,7 @@ const LoginFormUI = (props: LoginParams) => {
191
208
  const handleVerifyCodeClick = () => {
192
209
  if (phoneInputData.error) {
193
210
  showToast(ToastType.Error, phoneInputData.error);
194
- Vibration.vibrate()
211
+ vibrateApp()
195
212
  return;
196
213
  }
197
214
  if (
@@ -206,7 +223,7 @@ const LoginFormUI = (props: LoginParams) => {
206
223
  'The field Mobile phone is required.',
207
224
  ),
208
225
  );
209
- Vibration.vibrate()
226
+ vibrateApp()
210
227
  return;
211
228
  }
212
229
  handleSendVerifyCode && handleSendVerifyCode(phoneInputData.phone);
@@ -221,19 +238,19 @@ const LoginFormUI = (props: LoginParams) => {
221
238
  };
222
239
 
223
240
  const handleChangeInputEmail = (value: string, onChange: any) => {
224
- onChange(value.toLowerCase().replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''));
241
+ onChange(value.toLowerCase().trim().replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''));
225
242
  };
226
243
 
227
244
  const handleOpenRecaptcha = () => {
228
245
  setRecaptchaVerified(false)
229
246
  if (!recaptchaConfig?.siteKey) {
230
247
  showToast(ToastType.Error, t('NO_RECAPTCHA_SITE_KEY', 'The config doesn\'t have recaptcha site key'));
231
- Vibration.vibrate()
248
+ vibrateApp()
232
249
  return
233
250
  }
234
251
  if (!recaptchaConfig?.baseUrl) {
235
252
  showToast(ToastType.Error, t('NO_RECAPTCHA_BASE_URL', 'The config doesn\'t have recaptcha base url'));
236
- Vibration.vibrate()
253
+ vibrateApp()
237
254
  return
238
255
  }
239
256
 
@@ -250,9 +267,15 @@ const LoginFormUI = (props: LoginParams) => {
250
267
  setOtpType(type)
251
268
  }
252
269
 
253
- const handleLoginOtp = (code: string) => {
254
- handleButtonLoginClick({ code })
255
- setWillVerifyOtpState(false)
270
+ const handleLoginOtp = async (code: string) => {
271
+ if (!code) return
272
+ const logged = await handleButtonLoginClick({ code })
273
+ setCheckingCode(false)
274
+ if (logged) {
275
+ setWillVerifyOtpState(false)
276
+ } else {
277
+ setOtpError(t('OTP_CODE_INCORRECT', 'Otp code incorrect'))
278
+ }
256
279
  }
257
280
 
258
281
  const closeAlert = () => {
@@ -310,7 +333,7 @@ const LoginFormUI = (props: LoginParams) => {
310
333
  baseUrl: configs?.security_recaptcha_base_url?.value || null
311
334
  })
312
335
  showToast(ToastType.Info, t('TRY_AGAIN', 'Please try again'))
313
- Vibration.vibrate()
336
+ vibrateApp()
314
337
  return
315
338
  }
316
339
  formState.result?.result &&
@@ -320,7 +343,7 @@ const LoginFormUI = (props: LoginParams) => {
320
343
  ? formState.result?.result
321
344
  : formState.result?.result[0],
322
345
  );
323
- formState.result?.result && Vibration.vibrate()
346
+ formState.result?.result && vibrateApp()
324
347
  }
325
348
  }, [formState]);
326
349
 
@@ -332,7 +355,7 @@ const LoginFormUI = (props: LoginParams) => {
332
355
  ? verifyPhoneState?.result?.result
333
356
  : verifyPhoneState?.result?.result[0];
334
357
  verifyPhoneState.result?.result && showToast(ToastType.Error, message);
335
- verifyPhoneState.result?.result && Vibration.vibrate();
358
+ verifyPhoneState.result?.result && vibrateApp();
336
359
  setIsLoadingVerifyModal(false);
337
360
  return;
338
361
  }
@@ -373,20 +396,24 @@ const LoginFormUI = (props: LoginParams) => {
373
396
  }, [checkPhoneCodeState])
374
397
 
375
398
  useEffect(() => {
376
- if (!!Object.values(errors)?.length) Vibration.vibrate()
399
+ if (!!Object.values(errors)?.length) vibrateApp()
377
400
  }, [errors])
378
401
 
379
402
  return (
380
403
  <Container>
381
- <NavBar
382
- title={t('LOGIN', 'Login')}
383
- titleAlign={'center'}
384
- onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
385
- showCall={false}
386
- btnStyle={{ paddingLeft: 0 }}
387
- titleWrapStyle={{ paddingHorizontal: 0 }}
388
- titleStyle={{ marginRight: 0, marginLeft: 0 }}
389
- />
404
+ {isGuest ? (
405
+ <OText style={{ textAlign: 'center', marginBottom: 10 }} size={18}>{t('LOGIN', 'Login')}</OText>
406
+ ) : (
407
+ <NavBar
408
+ title={t('LOGIN', 'Login')}
409
+ titleAlign={'center'}
410
+ onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
411
+ showCall={false}
412
+ btnStyle={{ paddingLeft: 0 }}
413
+ titleWrapStyle={{ paddingHorizontal: 0 }}
414
+ titleStyle={{ marginRight: 0, marginLeft: 0 }}
415
+ />
416
+ )}
390
417
  <FormSide>
391
418
  {(Number(useLoginByEmail) + Number(useLoginByCellphone) + Number(useLoginOtpEmail) + Number(useLoginOtpCellphone) > 1) && (
392
419
  <LoginWith>
@@ -733,7 +760,7 @@ const LoginFormUI = (props: LoginParams) => {
733
760
  {configs && Object.keys(configs).length > 0 ? (
734
761
  (((configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') && configs?.facebook_id?.value && facebookLoginEnabled) ||
735
762
  ((configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && googleLoginEnabled) ||
736
- ((configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled)) &&
763
+ ((configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled)) && !isGuest &&
737
764
  (
738
765
  <>
739
766
  <View
@@ -761,7 +788,7 @@ const LoginFormUI = (props: LoginParams) => {
761
788
  facebookLoginEnabled && (
762
789
  <FacebookLogin
763
790
  notificationState={notificationState}
764
- handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
791
+ handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
765
792
  handleLoading={(val: boolean) => setIsFBLoading(val)}
766
793
  handleSuccessFacebookLogin={handleSuccessFacebook}
767
794
  />
@@ -770,7 +797,7 @@ const LoginFormUI = (props: LoginParams) => {
770
797
  <GoogleLogin
771
798
  notificationState={notificationState}
772
799
  webClientId={configs?.google_login_client_id?.value}
773
- handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
800
+ handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
774
801
  handleLoading={(val: boolean) => setIsFBLoading(val)}
775
802
  handleSuccessGoogleLogin={handleSuccessFacebook}
776
803
  />
@@ -778,7 +805,7 @@ const LoginFormUI = (props: LoginParams) => {
778
805
  {(configs?.apple_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && appleLoginEnabled && (
779
806
  <AppleLogin
780
807
  notificationState={notificationState}
781
- handleErrors={(err: any) => { showToast(ToastType.Error, err), Vibration.vibrate() }}
808
+ handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
782
809
  handleLoading={(val: boolean) => setIsFBLoading(val)}
783
810
  handleSuccessAppleLogin={handleSuccessFacebook}
784
811
  />
@@ -824,20 +851,23 @@ const LoginFormUI = (props: LoginParams) => {
824
851
  onClose={() => setIsModalVisible(false)}
825
852
  />
826
853
  </OModal>
827
- <OModal
828
- open={willVerifyOtpState}
829
- onClose={() => setWillVerifyOtpState(false)}
830
- entireModal
831
- title={t('ENTER_VERIFICATION_CODE', 'Enter verification code')}
854
+ <Modal
855
+ visible={willVerifyOtpState}
856
+ onDismiss={() => setWillVerifyOtpState(false)}
857
+ animationType='slide'
832
858
  >
833
859
  <Otp
860
+ isCheckingCode={isCheckingCode}
861
+ setCheckingCode={setCheckingCode}
834
862
  willVerifyOtpState={willVerifyOtpState}
863
+ otpError={otpError}
864
+ setOtpError={setOtpError}
835
865
  setWillVerifyOtpState={setWillVerifyOtpState}
836
866
  handleLoginOtp={handleLoginOtp}
837
867
  onSubmit={onSubmit}
838
868
  setAlertState={setAlertState}
839
869
  />
840
- </OModal>
870
+ </Modal>
841
871
  <Alert
842
872
  open={alertState.open}
843
873
  content={alertState.content}
@@ -5,74 +5,99 @@ import IconAntDesign from 'react-native-vector-icons/AntDesign'
5
5
  import { useTheme } from 'styled-components';
6
6
 
7
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 }
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
19
  }
20
20
 
21
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
- }
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
+
36
+ const theme = useTheme()
37
+ const animationProgress = useRef(new Animated.Value(initialValue))
38
+ const favRef = useRef<Lottie>(null)
39
+ const [isHide, setIsHide] = useState(true)
54
40
 
55
- const hideLottie = () => {
56
- setTimeout(() => setIsHide(true), 4500)
41
+ const favoriteArray = ['heart', 'hearto']
42
+ const icon = type === 'favorite' ? favoriteArray : []
43
+ const animationGif = type === 'favorite' ? theme.images?.general?.heart : ''
44
+
45
+ const onPressLottie = () => {
46
+ if (!disableAnimation) {
47
+ if (type === 'favorite') {
48
+ favRef.current?.play()
49
+ } else {
50
+ setIsHide(false)
51
+ Animated.timing(animationProgress.current, {
52
+ toValue,
53
+ duration: duration || 5000,
54
+ easing: animationType || Easing.linear,
55
+ useNativeDriver: useNativeDriver ?? true
56
+ }).start();
57
+ hideLottie()
58
+ }
57
59
  }
60
+ onClick()
61
+ }
62
+
63
+ const hideLottie = () => {
64
+ setTimeout(() => setIsHide(true), 4500)
65
+ }
58
66
 
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}
67
+ return (
68
+ <TouchableOpacity
69
+ onPress={onPressLottie}
70
+ style={style}
71
+ >
72
+ {type === 'favorite' ? (
73
+ // <Lottie
74
+ // ref={favRef}
75
+ // progress={initialValue}
76
+ // style={{ width: 20, height: 20 }}
77
+ // source={animationGif}
78
+ // />
79
+ <IconAntDesign
80
+ name={isActive ? icon[0] : icon[1]}
81
+ color={iconProps?.color || theme.colors.danger5}
82
+ size={iconProps?.size || 16}
83
+ style={iconProps?.style}
84
+ />
85
+ ) : (
86
+ <>
87
+ {!isHide &&
88
+ <Lottie
89
+ progress={animationProgress.current}
90
+ source={animationGif}
75
91
  />
76
- </TouchableOpacity>
77
- )
92
+ }
93
+ <IconAntDesign
94
+ name={isActive ? icon[0] : icon[1]}
95
+ color={iconProps?.color || theme.colors.danger5}
96
+ size={iconProps?.size || 16}
97
+ style={iconProps?.style}
98
+ />
99
+ </>
100
+ )}
101
+ </TouchableOpacity>
102
+ )
78
103
  }