ordering-ui-react-native 0.15.62 → 0.15.63-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 (210) hide show
  1. package/package.json +7 -3
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/AddressForm/index.tsx +18 -2
  4. package/src/components/BusinessBasicInformation/index.tsx +11 -19
  5. package/src/components/BusinessController/index.tsx +16 -8
  6. package/src/components/BusinessInformation/index.tsx +14 -0
  7. package/src/components/BusinessTypeFilter/index.tsx +1 -2
  8. package/src/components/BusinessesListing/index.tsx +1 -1
  9. package/src/components/Checkout/index.tsx +23 -2
  10. package/src/components/DriverTips/index.tsx +11 -6
  11. package/src/components/LanguageSelector/index.tsx +6 -2
  12. package/src/components/LoginForm/index.tsx +120 -30
  13. package/src/components/LoginForm/styles.tsx +6 -0
  14. package/src/components/OrderDetails/index.tsx +7 -21
  15. package/src/components/PaymentOptions/index.tsx +67 -50
  16. package/src/components/PaymentOptionsWebView/index.tsx +120 -121
  17. package/src/components/ReviewDriver/index.tsx +1 -1
  18. package/src/components/ReviewOrder/index.tsx +2 -1
  19. package/src/components/ReviewProducts/index.tsx +11 -0
  20. package/src/components/SignupForm/index.tsx +145 -61
  21. package/src/components/SingleProductCard/index.tsx +16 -4
  22. package/src/components/SingleProductReview/index.tsx +1 -1
  23. package/src/components/StripeMethodForm/index.tsx +22 -24
  24. package/src/components/UpsellingProducts/index.tsx +1 -1
  25. package/src/components/UserProfileForm/index.tsx +63 -6
  26. package/src/components/UserProfileForm/styles.tsx +8 -0
  27. package/src/components/VerifyPhone/styles.tsx +1 -2
  28. package/src/components/shared/OModal.tsx +1 -1
  29. package/src/hooks/useCountdownTimer.tsx +26 -0
  30. package/src/navigators/CheckoutNavigator.tsx +6 -0
  31. package/src/navigators/HomeNavigator.tsx +12 -0
  32. package/src/pages/BusinessesListing.tsx +7 -6
  33. package/src/pages/MultiCheckout.tsx +31 -0
  34. package/src/pages/MultiOrdersDetails.tsx +27 -0
  35. package/src/pages/OrderDetails.tsx +1 -1
  36. package/src/pages/ReviewDriver.tsx +2 -2
  37. package/src/pages/ReviewOrder.tsx +2 -2
  38. package/src/pages/Sessions.tsx +22 -0
  39. package/src/theme.json +0 -1
  40. package/src/types/index.tsx +18 -11
  41. package/src/utils/index.tsx +68 -1
  42. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +103 -15
  43. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -0
  44. package/themes/business/src/components/Chat/index.tsx +42 -90
  45. package/themes/business/src/components/DriverMap/index.tsx +6 -5
  46. package/themes/business/src/components/LoginForm/index.tsx +89 -2
  47. package/themes/business/src/components/LoginForm/styles.tsx +6 -0
  48. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  49. package/themes/business/src/components/NewOrderNotification/index.tsx +26 -13
  50. package/themes/business/src/components/OrderDetails/Business.tsx +2 -2
  51. package/themes/business/src/components/OrderDetails/Delivery.tsx +28 -11
  52. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +14 -7
  53. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +6 -0
  54. package/themes/business/src/components/OrdersListManager/index.tsx +1 -1
  55. package/themes/business/src/components/OrdersOption/index.tsx +8 -4
  56. package/themes/business/src/components/PreviousOrders/index.tsx +7 -7
  57. package/themes/business/src/components/ProductItemAccordion/index.tsx +2 -2
  58. package/themes/business/src/components/UserFormDetails/index.tsx +5 -2
  59. package/themes/business/src/components/UserProfileForm/index.tsx +2 -0
  60. package/themes/business/src/components/shared/OModal.tsx +1 -1
  61. package/themes/business/src/types/index.tsx +8 -2
  62. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  63. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  64. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  65. package/themes/kiosk/src/components/BusinessMenu/index.tsx +39 -28
  66. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -3
  67. package/themes/kiosk/src/components/Cart/index.tsx +11 -12
  68. package/themes/kiosk/src/components/CartBottomSheet/index.tsx +9 -2
  69. package/themes/kiosk/src/components/CartContent/index.tsx +0 -11
  70. package/themes/kiosk/src/components/CartItem/index.tsx +4 -3
  71. package/themes/kiosk/src/components/CategoriesMenu/index.tsx +107 -62
  72. package/themes/kiosk/src/components/Checkout/index.tsx +40 -22
  73. package/themes/kiosk/src/components/CustomerName/index.tsx +0 -6
  74. package/themes/kiosk/src/components/DrawerView/index.tsx +1 -0
  75. package/themes/kiosk/src/components/DrawerView/styles.tsx +2 -2
  76. package/themes/kiosk/src/components/NavBar/index.tsx +29 -20
  77. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  78. package/themes/kiosk/src/components/OrderDetails/index.tsx +32 -27
  79. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +9 -11
  80. package/themes/kiosk/src/components/PaymentOptions/index.tsx +56 -54
  81. package/themes/kiosk/src/components/ProductForm/index.tsx +7 -8
  82. package/themes/kiosk/src/components/ProductItemAccordion/index.tsx +2 -2
  83. package/themes/kiosk/src/components/ProductOption/index.tsx +1 -1
  84. package/themes/kiosk/src/components/ProductOptionSubOption/index.tsx +3 -1
  85. package/themes/kiosk/src/components/UpsellingProducts/index.tsx +16 -5
  86. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  87. package/themes/kiosk/src/types/index.d.ts +1 -0
  88. package/themes/original/index.tsx +30 -8
  89. package/themes/original/src/components/ActiveOrders/index.tsx +15 -132
  90. package/themes/original/src/components/ActiveOrders/styles.tsx +0 -54
  91. package/themes/original/src/components/AddressForm/index.tsx +7 -6
  92. package/themes/original/src/components/AddressList/index.tsx +30 -18
  93. package/themes/original/src/components/AppleLogin/index.tsx +7 -12
  94. package/themes/original/src/components/BusinessBasicInformation/index.tsx +137 -46
  95. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +4 -0
  96. package/themes/original/src/components/BusinessController/index.tsx +168 -96
  97. package/themes/original/src/components/BusinessController/styles.tsx +5 -0
  98. package/themes/original/src/components/BusinessItemAccordion/index.tsx +8 -5
  99. package/themes/original/src/components/BusinessItemAccordion/styles.tsx +3 -1
  100. package/themes/original/src/components/BusinessListingSearch/index.tsx +231 -63
  101. package/themes/original/src/components/BusinessListingSearch/styles.tsx +22 -2
  102. package/themes/original/src/components/BusinessPreorder/index.tsx +1 -1
  103. package/themes/original/src/components/BusinessProductsCategories/index.tsx +2 -2
  104. package/themes/original/src/components/BusinessProductsList/CategoryDescription/index.tsx +44 -0
  105. package/themes/original/src/components/BusinessProductsList/index.tsx +51 -52
  106. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  107. package/themes/original/src/components/BusinessProductsListing/index.tsx +291 -155
  108. package/themes/original/src/components/BusinessProductsListing/styles.tsx +27 -0
  109. package/themes/original/src/components/BusinessReviews/index.tsx +6 -1
  110. package/themes/original/src/components/BusinessTypeFilter/index.tsx +106 -39
  111. package/themes/original/src/components/BusinessTypeFilter/styles.tsx +2 -0
  112. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +560 -0
  113. package/themes/original/src/components/BusinessesListing/Layout/Appointment/styles.tsx +107 -0
  114. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +559 -0
  115. package/themes/original/src/components/BusinessesListing/{styles.tsx → Layout/Original/styles.tsx} +11 -3
  116. package/themes/original/src/components/BusinessesListing/index.tsx +99 -458
  117. package/themes/original/src/components/Cart/index.tsx +62 -43
  118. package/themes/original/src/components/Checkout/index.tsx +90 -39
  119. package/themes/original/src/components/DriverTips/index.tsx +17 -12
  120. package/themes/original/src/components/Favorite/index.tsx +92 -0
  121. package/themes/original/src/components/Favorite/styles.tsx +22 -0
  122. package/themes/original/src/components/FavoriteList/index.tsx +298 -0
  123. package/themes/original/src/components/FavoriteList/styles.tsx +5 -0
  124. package/themes/original/src/components/ForgotPasswordForm/index.tsx +84 -4
  125. package/themes/original/src/components/GPSButton/index.tsx +15 -8
  126. package/themes/original/src/components/GoogleMap/index.tsx +11 -11
  127. package/themes/original/src/components/Help/index.tsx +21 -4
  128. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +18 -1
  129. package/themes/original/src/components/LastOrders/index.tsx +12 -1
  130. package/themes/original/src/components/LoginForm/Otp/index.tsx +91 -0
  131. package/themes/original/src/components/LoginForm/Otp/styles.tsx +7 -0
  132. package/themes/original/src/components/LoginForm/index.tsx +332 -164
  133. package/themes/original/src/components/LoginForm/styles.tsx +1 -3
  134. package/themes/original/src/components/MessageListing/index.tsx +10 -1
  135. package/themes/original/src/components/Messages/index.tsx +1 -1
  136. package/themes/original/src/components/MomentOption/index.tsx +10 -1
  137. package/themes/original/src/components/MomentOption/styles.tsx +1 -1
  138. package/themes/original/src/components/MomentSelector/index.tsx +197 -0
  139. package/themes/original/src/components/MomentSelector/styles.tsx +6 -0
  140. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +243 -0
  141. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/styles.tsx +46 -0
  142. package/themes/original/src/components/MultiCheckout/index.tsx +298 -0
  143. package/themes/original/src/components/MultiCheckout/styles.tsx +59 -0
  144. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +372 -0
  145. package/themes/original/src/components/MultiOrdersDetails/index.tsx +258 -0
  146. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +50 -0
  147. package/themes/original/src/components/MyOrders/index.tsx +120 -32
  148. package/themes/original/src/components/MyOrders/styles.tsx +8 -1
  149. package/themes/original/src/components/NavBar/index.tsx +4 -4
  150. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +167 -0
  151. package/themes/original/src/components/OrderDetails/index.tsx +151 -65
  152. package/themes/original/src/components/OrderDetails/styles.tsx +1 -2
  153. package/themes/original/src/components/OrderSummary/index.tsx +6 -6
  154. package/themes/original/src/components/OrderTypeSelector/index.tsx +4 -2
  155. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +153 -0
  156. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/styles.tsx +6 -0
  157. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +53 -0
  158. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/styles.tsx +6 -0
  159. package/themes/original/src/components/OrdersOption/index.tsx +137 -38
  160. package/themes/original/src/components/OrdersOption/styles.tsx +4 -1
  161. package/themes/original/src/components/PaymentOptionCash/index.tsx +2 -2
  162. package/themes/original/src/components/PaymentOptionWallet/index.tsx +17 -23
  163. package/themes/original/src/components/PaymentOptionWallet/styles.tsx +1 -1
  164. package/themes/original/src/components/PaymentOptions/index.tsx +58 -37
  165. package/themes/original/src/components/PhoneInputNumber/index.tsx +5 -11
  166. package/themes/original/src/components/PreviousOrders/index.tsx +18 -147
  167. package/themes/original/src/components/ProductForm/index.tsx +718 -679
  168. package/themes/original/src/components/ProductForm/styles.tsx +6 -2
  169. package/themes/original/src/components/ProductItemAccordion/index.tsx +2 -2
  170. package/themes/original/src/components/ProductOption/index.tsx +1 -1
  171. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -12
  172. package/themes/original/src/components/ProfessionalFilter/index.tsx +128 -0
  173. package/themes/original/src/components/ProfessionalFilter/styles.tsx +0 -0
  174. package/themes/original/src/components/ProfessionalProfile/index.tsx +298 -0
  175. package/themes/original/src/components/ProfessionalProfile/styles.tsx +46 -0
  176. package/themes/original/src/components/Promotions/index.tsx +151 -133
  177. package/themes/original/src/components/Promotions/styles.tsx +3 -23
  178. package/themes/original/src/components/ReviewDriver/index.tsx +6 -6
  179. package/themes/original/src/components/ReviewOrder/index.tsx +1 -1
  180. package/themes/original/src/components/ReviewTrigger/index.tsx +118 -0
  181. package/themes/original/src/components/ReviewTrigger/styles.tsx +34 -0
  182. package/themes/original/src/components/SearchBar/index.tsx +13 -5
  183. package/themes/original/src/components/ServiceForm/index.tsx +579 -0
  184. package/themes/original/src/components/ServiceForm/styles.tsx +50 -0
  185. package/themes/original/src/components/Sessions/index.tsx +160 -0
  186. package/themes/original/src/components/Sessions/styles.tsx +15 -0
  187. package/themes/original/src/components/SignupForm/index.tsx +237 -126
  188. package/themes/original/src/components/SingleOrderCard/index.tsx +275 -0
  189. package/themes/original/src/components/SingleOrderCard/styles.tsx +54 -0
  190. package/themes/original/src/components/SingleProductCard/index.tsx +150 -84
  191. package/themes/original/src/components/StripeElementsForm/index.tsx +16 -8
  192. package/themes/original/src/components/StripeElementsForm/naked.tsx +2 -2
  193. package/themes/original/src/components/UpsellingProducts/index.tsx +86 -74
  194. package/themes/original/src/components/UserDetails/index.tsx +15 -81
  195. package/themes/original/src/components/UserFormDetails/index.tsx +98 -66
  196. package/themes/original/src/components/UserProfile/index.tsx +11 -2
  197. package/themes/original/src/components/UserProfileForm/index.tsx +33 -22
  198. package/themes/original/src/components/UserVerification/index.tsx +178 -192
  199. package/themes/original/src/components/VerifyPhone/index.tsx +10 -7
  200. package/themes/original/src/components/VerifyPhone/styles.tsx +2 -1
  201. package/themes/original/src/components/Wallets/index.tsx +76 -9
  202. package/themes/original/src/components/Wallets/styles.tsx +21 -0
  203. package/themes/original/src/components/shared/OBottomPopup.tsx +44 -13
  204. package/themes/original/src/components/shared/OInput.tsx +3 -2
  205. package/themes/original/src/components/shared/OModal.tsx +4 -2
  206. package/themes/original/src/layouts/FloatingBottomContainer.tsx +5 -1
  207. package/themes/original/src/types/index.tsx +184 -35
  208. package/themes/original/src/utils/index.tsx +96 -2
  209. package/themes/single-business/src/components/OrderTypeSelector/index.tsx +1 -1
  210. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,6 +1,6 @@
1
1
  import React, { useEffect, useState } from 'react';
2
2
  import { Platform, Text, StyleSheet } from 'react-native';
3
- import { useApi, useSession, useLanguage, useConfig, useToast, ToastType } from 'ordering-components/native';
3
+ import { useApi, useSession, useLanguage, useConfig } from 'ordering-components/native';
4
4
  import { appleAuthAndroid, appleAuth } from '@invertase/react-native-apple-authentication';
5
5
  import uuid from 'react-native-uuid';
6
6
  import Icon from 'react-native-vector-icons/FontAwesome5';
@@ -19,14 +19,13 @@ export const AppleLogin = (props: any) => {
19
19
  const [{ auth }] = useSession();
20
20
  const [, t] = useLanguage();
21
21
  const [{ configs }] = useConfig();
22
- const [, {showToast}] = useToast()
23
22
  const [credentialStateForUser, updateCredentialStateForUser] = useState<any>(-1);
24
23
 
25
- let user : any= null
24
+ let user: any = null
26
25
 
27
26
  const buttonText = auth
28
27
  ? t('CONTINUE_WITH_APPLE', 'Logout with Apple')
29
- : t('CONTINUE_WITH_FACEBOOK', 'Continue with Apple');
28
+ : t('CONTINUE_WITH_APPLE', 'Continue with Apple');
30
29
 
31
30
  const performAppleLogin = async (code: string) => {
32
31
  try {
@@ -45,7 +44,7 @@ export const AppleLogin = (props: any) => {
45
44
  handleLoading && handleLoading(false)
46
45
  }
47
46
  } else {
48
- showToast(ToastType.Error, `Error login on apple from api Code: ${code} ${Platform.OS}`, 10000)
47
+ handleErrors && handleErrors(result)
49
48
  handleLoading && handleLoading(false)
50
49
  }
51
50
  } catch (err: any) {
@@ -54,7 +53,7 @@ export const AppleLogin = (props: any) => {
54
53
  }
55
54
  }
56
55
 
57
- const fetchAndUpdateCredentialState = async (updateCredentialStateForUser : any) => {
56
+ const fetchAndUpdateCredentialState = async (updateCredentialStateForUser: any) => {
58
57
  if (user === null) {
59
58
  updateCredentialStateForUser('N/A');
60
59
  } else {
@@ -67,7 +66,7 @@ export const AppleLogin = (props: any) => {
67
66
  }
68
67
  }
69
68
 
70
- const onIOSButtonPress = async (updateCredentialStateForUser : any) => {
69
+ const onIOSButtonPress = async (updateCredentialStateForUser: any) => {
71
70
  try {
72
71
  const appleAuthRequestResponse = await appleAuth.performRequest({
73
72
  requestedOperation: appleAuth.Operation.LOGIN,
@@ -80,7 +79,7 @@ export const AppleLogin = (props: any) => {
80
79
  identityToken,
81
80
  authorizationCode
82
81
  } = appleAuthRequestResponse;
83
-
82
+
84
83
  user = newUser;
85
84
 
86
85
  fetchAndUpdateCredentialState(updateCredentialStateForUser).catch(error =>
@@ -88,7 +87,6 @@ export const AppleLogin = (props: any) => {
88
87
  );
89
88
 
90
89
  if (identityToken && authorizationCode) {
91
- showToast(ToastType.Success, `Apple Authentication Completed, ${email}`)
92
90
  performAppleLogin(authorizationCode)
93
91
  } else {
94
92
  handleErrors && handleErrors('UNABLE_LOGIN_TOKEN', 'Unable to login, no token found')
@@ -158,9 +156,6 @@ export const AppleLogin = (props: any) => {
158
156
 
159
157
  return (
160
158
  <Container>
161
- {credentialStateForUser !== -1 && (
162
- <Text>{credentialStateForUser}</Text>
163
- )}
164
159
  {canShowButton() &&
165
160
  <AppleButton
166
161
  onPress={() => Platform.OS == 'android' ? onAndroidButtonPress() : onIOSButtonPress(updateCredentialStateForUser)}
@@ -1,10 +1,11 @@
1
1
  import React, { useState, useEffect } from 'react';
2
- import { StyleSheet, View, TouchableOpacity } from 'react-native';
2
+ import { StyleSheet, View, TouchableOpacity, Linking } from 'react-native';
3
3
  import { useUtils, useOrder, useLanguage } from 'ordering-components/native';
4
4
  import { useTheme } from 'styled-components/native';
5
5
  import { OIcon, OText, OModal } from '../shared';
6
6
  import { BusinessBasicInformationParams } from '../../types';
7
- import { convertHoursToMinutes } from '../../utils';
7
+ import { convertHoursToMinutes, shape } from '../../utils';
8
+ import MaterialComIcon from 'react-native-vector-icons/MaterialCommunityIcons'
8
9
  import dayjs from 'dayjs';
9
10
  import timezone from 'dayjs/plugin/timezone';
10
11
  import isBetween from 'dayjs/plugin/isBetween';
@@ -21,7 +22,8 @@ import {
21
22
  WrapReviews,
22
23
  WrapBusinessInfo,
23
24
  TitleWrapper,
24
- RibbonBox
25
+ RibbonBox,
26
+ SocialListWrapper
25
27
  } from './styles';
26
28
  import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
27
29
  const types = ['food', 'laundry', 'alcohol', 'groceries'];
@@ -44,6 +46,65 @@ export const BusinessBasicInformation = (
44
46
  const [businessInformationObtained, setBusinessInformationObtained] = useState(false)
45
47
  const [businessReviewsObtained, setBusinessReviewsObtainedbtained] = useState(false)
46
48
 
49
+ const styles = StyleSheet.create({
50
+ businesInfoheaderStyle: {
51
+ height: 150,
52
+ },
53
+ headerStyle: {
54
+ height: 260,
55
+ },
56
+ businessLogo: {
57
+ width: 72,
58
+ height: 72,
59
+ borderRadius: 7.6,
60
+ justifyContent: 'flex-start',
61
+ alignItems: 'flex-start',
62
+ },
63
+ businessInfo: {
64
+ paddingHorizontal: 40,
65
+ paddingTop: 56,
66
+ },
67
+ bullet: {
68
+ flexDirection: 'row',
69
+ alignItems: 'center',
70
+ },
71
+ metadata: {
72
+ marginRight: 2,
73
+ },
74
+ starIcon: {
75
+ marginHorizontal: 5,
76
+ },
77
+ reviewStyle: {
78
+ flexDirection: 'row',
79
+ alignItems: 'center',
80
+ justifyContent: 'center'
81
+ },
82
+ modalTitleSectionStyle: {
83
+ position: 'absolute',
84
+ width: '100%',
85
+ top: 0,
86
+ zIndex: 100,
87
+ left: 40
88
+ },
89
+ socialIcon: {
90
+ borderRadius: 3,
91
+ borderColor: theme.colors.border,
92
+ borderWidth: 1,
93
+ width: 20,
94
+ height: 20,
95
+ justifyContent: 'center',
96
+ alignItems: 'center',
97
+ marginRight: 5,
98
+ marginBottom: 7
99
+ },
100
+ tiktokIcon: {
101
+ height: 12,
102
+ width: 12,
103
+ margin: 0,
104
+ padding: 0
105
+ }
106
+ });
107
+
47
108
  const handleClickBusinessInformation = () => {
48
109
  if (!businessInformationObtained) {
49
110
  BusinessInformation = require('../BusinessInformation').BusinessInformation
@@ -73,6 +134,19 @@ export const BusinessBasicInformation = (
73
134
  return _types.join(', ');
74
135
  };
75
136
 
137
+ const SocialNetWork = (props: any) => {
138
+ const { socialLink, iconTitle} = props
139
+
140
+ return (
141
+ <TouchableOpacity style={styles.socialIcon} onPress={() => Linking.openURL(socialLink)}>
142
+ <MaterialComIcon
143
+ name={iconTitle}
144
+ color={theme.colors.textNormal}
145
+ size={14}
146
+ />
147
+ </TouchableOpacity>
148
+ )
149
+ }
76
150
 
77
151
  useEffect(() => {
78
152
  if (businessState?.loading) return
@@ -177,6 +251,65 @@ export const BusinessBasicInformation = (
177
251
  <OText color={theme.colors.textNormal}>{getBusinessType()}</OText>
178
252
  </View>
179
253
  )}
254
+ {loading ? (
255
+ <Placeholder Animation={Fade}>
256
+ <View style={{ flexDirection: 'row' }}>
257
+ {[...Array(5).keys()].map(i => (
258
+ <View style={styles.socialIcon} key={i}>
259
+ <PlaceholderLine width={100} height={20} style={{ marginBottom: 0 }} />
260
+ </View>
261
+ ))}
262
+ </View>
263
+ </Placeholder>
264
+ ) : (
265
+ <SocialListWrapper
266
+ showsVerticalScrollIndicator={false}
267
+ showsHorizontalScrollIndicator={false}
268
+ horizontal
269
+ contentContainerStyle={{ flex: 1}}
270
+ >
271
+ {!!business?.facebook_profile && (
272
+ <SocialNetWork
273
+ socialLink={business?.facebook_profile}
274
+ iconTitle='facebook'
275
+ />
276
+ )}
277
+ {!!business?.instagram_profile && (
278
+ <SocialNetWork
279
+ socialLink={business?.instagram_profile}
280
+ iconTitle='instagram'
281
+ />
282
+ )}
283
+ {!!business?.tiktok_profile && (
284
+ <TouchableOpacity style={styles.socialIcon} onPress={() => Linking.openURL(business?.tiktok_profile)}>
285
+ <View style={styles.tiktokIcon}>
286
+ <OIcon
287
+ src={theme.images.general.tiktok}
288
+ style={{ width: '100%', height: '100%'}}
289
+ />
290
+ </View>
291
+ </TouchableOpacity>
292
+ )}
293
+ {!!business?.pinterest_profile && (
294
+ <SocialNetWork
295
+ socialLink={business?.pinterest_profile}
296
+ iconTitle='pinterest'
297
+ />
298
+ )}
299
+ {!!business?.whatsapp_number && (
300
+ <SocialNetWork
301
+ socialLink={business?.whatsapp_number}
302
+ iconTitle='whatsapp'
303
+ />
304
+ )}
305
+ {!!business?.snapchat_profile && (
306
+ <SocialNetWork
307
+ socialLink={business?.snapchat_profile}
308
+ iconTitle='snapchat'
309
+ />
310
+ )}
311
+ </SocialListWrapper>
312
+ )}
180
313
  <View>
181
314
  <BusinessInfoItem>
182
315
  {loading && (
@@ -223,7 +356,7 @@ export const BusinessBasicInformation = (
223
356
  <WrapReviews>
224
357
  {!isBusinessInfoShow && (
225
358
  <>
226
- {isPreOrder && (
359
+ {isPreOrder && (!business?.professionals || business?.professionals?.length === 0) && (
227
360
  <>
228
361
  <TouchableOpacity onPress={() => navigation.navigate('BusinessPreorder', { business: businessState?.business, handleBusinessClick: () => navigation?.goBack() })}>
229
362
  <OText color={theme.colors.textSecondary} style={{ textDecorationLine: 'underline' }}>
@@ -276,45 +409,3 @@ export const BusinessBasicInformation = (
276
409
  </BusinessContainer>
277
410
  );
278
411
  };
279
-
280
- const styles = StyleSheet.create({
281
- businesInfoheaderStyle: {
282
- height: 150,
283
- },
284
- headerStyle: {
285
- height: 260,
286
- },
287
- businessLogo: {
288
- width: 72,
289
- height: 72,
290
- borderRadius: 7.6,
291
- justifyContent: 'flex-start',
292
- alignItems: 'flex-start',
293
- },
294
- businessInfo: {
295
- paddingHorizontal: 40,
296
- paddingTop: 56,
297
- },
298
- bullet: {
299
- flexDirection: 'row',
300
- alignItems: 'center',
301
- },
302
- metadata: {
303
- marginRight: 2,
304
- },
305
- starIcon: {
306
- marginHorizontal: 5,
307
- },
308
- reviewStyle: {
309
- flexDirection: 'row',
310
- alignItems: 'center',
311
- justifyContent: 'center'
312
- },
313
- modalTitleSectionStyle: {
314
- position: 'absolute',
315
- width: '100%',
316
- top: 0,
317
- zIndex: 100,
318
- left: 40
319
- },
320
- });
@@ -68,3 +68,7 @@ export const RibbonBox = styled.View`
68
68
  border-radius: 50px;
69
69
  `}
70
70
  `
71
+
72
+ export const SocialListWrapper = styled.ScrollView`
73
+ flex-direction: row;
74
+ `
@@ -1,13 +1,17 @@
1
- import React from 'react';
1
+ import React, { useState } from 'react';
2
+ import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
2
3
  import {
3
4
  BusinessController as BusinessSingleCard,
4
5
  useUtils,
5
6
  useOrder,
6
7
  useLanguage,
7
- useConfig
8
+ useConfig,
9
+ useToast,
10
+ ToastType
8
11
  } from 'ordering-components/native';
9
12
  import { OIcon, OText } from '../shared';
10
- import { StyleSheet, View } from 'react-native';
13
+ import { StyleSheet, TouchableOpacity, View } from 'react-native';
14
+ import { InView } from 'react-native-intersection-observer'
11
15
  import { BusinessControllerParams } from '../../types';
12
16
  import { convertHoursToMinutes, shape } from '../../utils';
13
17
  import {
@@ -20,10 +24,12 @@ import {
20
24
  BusinessState,
21
25
  BusinessLogo,
22
26
  Reviews,
23
- RibbonBox
27
+ RibbonBox,
28
+ ReviewAndFavorite
24
29
  } from './styles';
25
30
  import { useTheme } from 'styled-components/native';
26
31
  import FontAwesomeIcon from 'react-native-vector-icons/FontAwesome5';
32
+ import IconAntDesign from 'react-native-vector-icons/AntDesign'
27
33
  import FastImage from 'react-native-fast-image'
28
34
 
29
35
  export const BusinessControllerUI = (props: BusinessControllerParams) => {
@@ -40,13 +46,17 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
40
46
  businessDeliveryPrice,
41
47
  businessDeliveryTime,
42
48
  businessPickupTime,
43
- businessDistance
49
+ businessDistance,
50
+ handleFavoriteBusiness,
51
+ enableIntersection
44
52
  } = props;
45
53
  const [{ parsePrice, parseDistance, parseNumber, optimizeImage }] = useUtils();
54
+ const [, { showToast }] = useToast()
46
55
  const [orderState] = useOrder();
47
56
  const [configState] = useConfig();
48
57
  const [, t] = useLanguage();
49
58
  const theme = useTheme()
59
+ const [isIntersectionObserver, setIsIntersectionObserver] = useState(!enableIntersection)
50
60
  const styles = StyleSheet.create({
51
61
  headerStyle: {
52
62
  borderTopLeftRadius: 7.6,
@@ -116,115 +126,177 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
116
126
  const handleBusinessClick = (selectedBusiness: any) => {
117
127
  if (business?.open) handleClick && handleClick(selectedBusiness)
118
128
  else {
119
- navigation.navigate('BusinessPreorder', { business: selectedBusiness, handleBusinessClick: handleClick })
129
+ if (configState?.configs?.preorder_status_enabled?.value === '1') {
130
+ navigation.navigate('BusinessPreorder', { business: selectedBusiness, handleBusinessClick: handleClick })
131
+ return
132
+ }
133
+ showToast(ToastType.Info, t('ERROR_ADD_PRODUCT_BUSINESS_CLOSED', 'The business is closed at the moment'));
120
134
  }
121
135
  }
122
136
 
137
+ const handleChangeFavorite = () => {
138
+ handleFavoriteBusiness && handleFavoriteBusiness(!business?.favorite)
139
+ }
140
+
123
141
  return (
124
- <Card activeOpacity={1} onPress={() => handleBusinessClick(business)} style={style}>
125
- {business?.ribbon?.enabled && (
126
- <RibbonBox
127
- bgColor={business?.ribbon?.color}
128
- isRoundRect={business?.ribbon?.shape === shape?.rectangleRound}
129
- isCapsule={business?.ribbon?.shape === shape?.capsuleShape}
130
- >
131
- <OText
132
- size={10}
133
- weight={'400'}
134
- color={theme.colors.white}
135
- numberOfLines={2}
136
- ellipsizeMode='tail'
137
- lineHeight={13}
138
- >
139
- {business?.ribbon?.text}
140
- </OText>
141
- </RibbonBox>
142
- )}
143
- <BusinessHero>
144
- <FastImage
145
- style={{ height: 120 }}
146
- source={{
147
- uri: optimizeImage(businessHeader || business?.header, 'h_500,c_limit'),
148
- priority: FastImage.priority.normal,
149
- }}
150
- resizeMode={FastImage.resizeMode.cover}
151
- />
152
- {(businessFeatured ?? business?.featured) && (
153
- <View style={styles.featured}>
154
- <FontAwesomeIcon name="crown" size={26} color="gold" />
155
- </View>
156
- )}
157
- <BusinessState>
158
- {!isBusinessOpen && (configState?.configs?.preorder_status_enabled?.value === '1') && (
159
- <View style={styles.businessStateView}>
142
+ <InView style={{ minHeight: 200 }} triggerOnce={true} onChange={(inView: boolean) => setIsIntersectionObserver(inView)}>
143
+ {isIntersectionObserver ? (
144
+ <Card activeOpacity={1} onPress={() => handleBusinessClick(business)} style={style}>
145
+ {business?.ribbon?.enabled && (
146
+ <RibbonBox
147
+ bgColor={business?.ribbon?.color}
148
+ isRoundRect={business?.ribbon?.shape === shape?.rectangleRound}
149
+ isCapsule={business?.ribbon?.shape === shape?.capsuleShape}
150
+ >
160
151
  <OText
161
- color={theme.colors.textThird}
162
152
  size={10}
163
- style={styles.businessStateText}>
164
- {t('PREORDER', 'PREORDER')}
153
+ weight={'400'}
154
+ color={theme.colors.white}
155
+ numberOfLines={2}
156
+ ellipsizeMode='tail'
157
+ lineHeight={13}
158
+ >
159
+ {business?.ribbon?.text}
165
160
  </OText>
166
- </View>
161
+ </RibbonBox>
167
162
  )}
168
- </BusinessState>
169
- </BusinessHero>
170
- <BusinessContent>
171
- <BusinessInfo>
172
- <BusinessLogo style={styles.businessLogo}>
163
+ <BusinessHero>
173
164
  <FastImage
174
- style={{ width: 56, height: 56 }}
165
+ style={{ height: 120 }}
175
166
  source={{
176
- uri: optimizeImage(businessLogo || business?.logo, 'h_150,c_limit'),
167
+ uri: optimizeImage(businessHeader || business?.header, 'h_500,c_limit'),
177
168
  priority: FastImage.priority.normal,
178
169
  }}
179
170
  resizeMode={FastImage.resizeMode.cover}
180
171
  />
181
- </BusinessLogo>
182
- {(businessReviews?.reviews?.total > 0 ?? business?.reviews?.total > 0) && (
183
- <Reviews>
184
- <OIcon src={theme.images.general.star} width={12} style={styles.starIcon} />
185
- <OText size={10} style={{ lineHeight: 15 }}>
186
- {parseNumber(businessReviews?.reviews?.total ?? business?.reviews?.total, { separator: '.' })}
187
- </OText>
188
- </Reviews>
189
- )}
190
- </BusinessInfo>
191
- <OText
192
- size={12}
193
- style={{ lineHeight: 18, marginBottom: 6 }}
194
- weight={'500'}>
195
- {business?.name}
196
- </OText>
197
- <OText size={10} style={{ lineHeight: 15, marginBottom: 3 }}>
198
- {business?.address}
199
- </OText>
200
- {/* <BusinessCategory>
172
+ {(businessFeatured ?? business?.featured) && (
173
+ <View style={styles.featured}>
174
+ <FontAwesomeIcon name="crown" size={26} color="gold" />
175
+ </View>
176
+ )}
177
+ <BusinessState>
178
+ {!isBusinessOpen && (configState?.configs?.preorder_status_enabled?.value === '1') && (
179
+ <View style={styles.businessStateView}>
180
+ <OText
181
+ color={theme.colors.textThird}
182
+ size={10}
183
+ style={styles.businessStateText}>
184
+ {t('PREORDER', 'PREORDER')}
185
+ </OText>
186
+ </View>
187
+ )}
188
+ </BusinessState>
189
+ </BusinessHero>
190
+ <BusinessContent>
191
+ <BusinessInfo>
192
+ <BusinessLogo style={styles.businessLogo}>
193
+ <FastImage
194
+ style={{ width: 56, height: 56 }}
195
+ source={{
196
+ uri: optimizeImage(businessLogo || business?.logo, 'h_150,c_limit'),
197
+ priority: FastImage.priority.normal,
198
+ }}
199
+ resizeMode={FastImage.resizeMode.cover}
200
+ />
201
+ </BusinessLogo>
202
+ <ReviewAndFavorite>
203
+ {(businessReviews?.reviews?.total > 0 ?? business?.reviews?.total > 0) && (
204
+ <Reviews>
205
+ <OIcon src={theme.images.general.star} width={12} style={styles.starIcon} />
206
+ <OText size={10} style={{ lineHeight: 15 }}>
207
+ {parseNumber(businessReviews?.reviews?.total ?? business?.reviews?.total, { separator: '.' })}
208
+ </OText>
209
+ </Reviews>
210
+ )}
211
+ <TouchableOpacity
212
+ onPress={handleChangeFavorite}
213
+ >
214
+ <IconAntDesign
215
+ name={business?.favorite ? 'heart' : 'hearto'}
216
+ color={theme.colors.danger5}
217
+ size={18}
218
+ />
219
+ </TouchableOpacity>
220
+ </ReviewAndFavorite>
221
+ </BusinessInfo>
222
+ <OText
223
+ size={12}
224
+ style={{ lineHeight: 18, marginBottom: 6 }}
225
+ weight={'500'}>
226
+ {business?.name}
227
+ </OText>
228
+ <OText size={10} style={{ lineHeight: 15, marginBottom: 3 }}>
229
+ {business?.address}
230
+ </OText>
231
+ {/* <BusinessCategory>
201
232
  <OText>{getBusinessType()}</OText>
202
233
  </BusinessCategory> */}
203
- <Metadata>
204
- {!isBusinessOpen ? (
205
- <View style={styles.closed}>
206
- <OText size={10} color={theme.colors.red}>
207
- {t('CLOSED', 'Closed')}
208
- </OText>
209
- </View>
210
- ) : (
211
- <View style={styles.bullet}>
212
- {orderState?.options?.type === 1 && (
213
- <OText size={10} color={theme.colors.textSecondary}>
214
- {`${t('DELIVERY_FEE', 'Delivery fee')} ${parsePrice(businessDeliveryPrice ?? business?.delivery_price) + ' \u2022 '}`}
215
- </OText>
234
+ <Metadata>
235
+ {!isBusinessOpen ? (
236
+ <View style={styles.closed}>
237
+ <OText size={10} color={theme.colors.red}>
238
+ {t('CLOSED', 'Closed')}
239
+ </OText>
240
+ </View>
241
+ ) : (
242
+ <View style={styles.bullet}>
243
+ {orderState?.options?.type === 1 && (
244
+ <OText size={10} color={theme.colors.textSecondary}>
245
+ {`${t('DELIVERY_FEE', 'Delivery fee')} ${parsePrice(businessDeliveryPrice ?? business?.delivery_price) + ' \u2022 '}`}
246
+ </OText>
247
+ )}
248
+ <OText size={10} color={theme.colors.textSecondary}>{`${convertHoursToMinutes(
249
+ orderState?.options?.type === 1
250
+ ? (businessDeliveryTime ?? business?.delivery_time)
251
+ : (businessPickupTime ?? business?.pickup_time),
252
+ )} \u2022 `}</OText>
253
+ <OText size={10} color={theme.colors.textSecondary}>{parseDistance(businessDistance ?? business?.distance)}</OText>
254
+ </View>
216
255
  )}
217
- <OText size={10} color={theme.colors.textSecondary}>{`${convertHoursToMinutes(
218
- orderState?.options?.type === 1
219
- ? (businessDeliveryTime ?? business?.delivery_time)
220
- : (businessPickupTime ?? business?.pickup_time),
221
- )} \u2022 `}</OText>
222
- <OText size={10} color={theme.colors.textSecondary}>{parseDistance(businessDistance ?? business?.distance)}</OText>
256
+ </Metadata>
257
+ </BusinessContent>
258
+ </Card>
259
+ ) : (
260
+ <Placeholder
261
+ Animation={Fade}
262
+ style={{ marginBottom: 20 }}>
263
+ <View style={{ width: '100%' }}>
264
+ <PlaceholderLine
265
+ height={200}
266
+ style={{ marginBottom: 20, borderRadius: 25 }}
267
+ />
268
+ <View style={{ paddingHorizontal: 10 }}>
269
+ <View
270
+ style={{
271
+ flexDirection: 'row',
272
+ justifyContent: 'space-between',
273
+ }}>
274
+ <PlaceholderLine
275
+ height={25}
276
+ width={40}
277
+ style={{ marginBottom: 10 }}
278
+ />
279
+ <PlaceholderLine
280
+ height={25}
281
+ width={20}
282
+ style={{ marginBottom: 10 }}
283
+ />
284
+ </View>
285
+ <PlaceholderLine
286
+ height={20}
287
+ width={30}
288
+ style={{ marginBottom: 10 }}
289
+ />
290
+ <PlaceholderLine
291
+ height={20}
292
+ width={80}
293
+ style={{ marginBottom: 10 }}
294
+ />
223
295
  </View>
224
- )}
225
- </Metadata>
226
- </BusinessContent>
227
- </Card>
296
+ </View>
297
+ </Placeholder>
298
+ )}
299
+ </InView>
228
300
  );
229
301
  };
230
302
 
@@ -49,6 +49,11 @@ export const BusinessLogo = styled.View`
49
49
 
50
50
  `
51
51
 
52
+ export const ReviewAndFavorite = styled.View`
53
+ flex-direction: row;
54
+ align-items: center;
55
+ `
56
+
52
57
  export const Reviews = styled.View`
53
58
  flex-direction: row;
54
59
  align-items: center;