ordering-ui-react-native 0.17.92 → 0.17.93-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.
- package/package.json +8 -7
- package/src/DeliveryApp.tsx +43 -1
- package/src/components/BusinessInformation/index.tsx +10 -9
- package/src/components/BusinessesListing/index.tsx +1 -1
- package/src/components/OrderCreating/index.tsx +0 -20
- package/src/components/PaymentOptionsWebView/index.tsx +29 -8
- package/src/components/PhoneInputNumber/index.tsx +6 -2
- package/src/components/StripeMethodForm/index.tsx +136 -102
- package/src/components/VerifyPhone/styles.tsx +1 -2
- package/src/components/shared/OToast.tsx +3 -2
- package/src/types/index.tsx +5 -0
- package/src/utils/index.tsx +5 -0
- package/themes/business/index.tsx +2 -0
- package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +36 -26
- package/themes/business/src/components/BusinessController/index.tsx +0 -1
- package/themes/business/src/components/Chat/index.tsx +163 -123
- package/themes/business/src/components/DriverMap/index.tsx +17 -6
- package/themes/business/src/components/DriverSchedule/index.tsx +45 -8
- package/themes/business/src/components/FloatingButton/index.tsx +34 -31
- package/themes/business/src/components/GoogleMap/index.tsx +58 -57
- package/themes/business/src/components/LoginForm/index.tsx +5 -2
- package/themes/business/src/components/MapView/index.tsx +14 -10
- package/themes/business/src/components/MessagesOption/index.tsx +20 -93
- package/themes/business/src/components/NewOrderNotification/index.tsx +123 -96
- package/themes/business/src/components/NotFoundSource/index.tsx +2 -2
- package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
- package/themes/business/src/components/OrderDetails/Delivery.tsx +202 -12
- package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +84 -37
- package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +87 -66
- package/themes/business/src/components/OrderDetailsLogistic/index.tsx +200 -0
- package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
- package/themes/business/src/components/OrderMessage/index.tsx +19 -18
- package/themes/business/src/components/OrderSummary/index.tsx +114 -123
- package/themes/business/src/components/OrdersOption/index.tsx +22 -22
- package/themes/business/src/components/PreviousMessages/FooterMessageComponent.tsx +103 -0
- package/themes/business/src/components/PreviousMessages/index.tsx +97 -55
- package/themes/business/src/components/PreviousOrders/OrderItem.tsx +17 -12
- package/themes/business/src/components/PreviousOrders/OrderList.tsx +93 -0
- package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +1 -1
- package/themes/business/src/components/PreviousOrders/index.tsx +198 -221
- package/themes/business/src/components/ProductItemAccordion/index.tsx +7 -1
- package/themes/business/src/components/ReviewCustomer/index.tsx +18 -13
- package/themes/business/src/components/StoresList/index.tsx +3 -4
- package/themes/business/src/components/UserProfileForm/index.tsx +14 -15
- package/themes/business/src/components/shared/OModal.tsx +16 -9
- package/themes/business/src/types/index.tsx +24 -10
- package/themes/business/src/utils/index.tsx +29 -2
- package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
- package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
- package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
- package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
- package/themes/kiosk/src/components/Intro/index.tsx +16 -1
- package/themes/kiosk/src/components/LoginForm/index.tsx +7 -5
- package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
- package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
- package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
- package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +2 -2
- package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
- package/themes/original/index.tsx +1 -1
- package/themes/original/src/components/AddressDetails/index.tsx +19 -3
- package/themes/original/src/components/AddressForm/index.tsx +35 -17
- package/themes/original/src/components/AddressList/index.tsx +5 -8
- package/themes/original/src/components/AnalyticsSegment/index.tsx +193 -10
- package/themes/original/src/components/AppleLogin/index.tsx +4 -4
- package/themes/original/src/components/AppleLogin/styles.tsx +3 -1
- package/themes/original/src/components/BusinessBasicInformation/index.tsx +72 -36
- package/themes/original/src/components/BusinessBasicInformation/styles.tsx +10 -12
- package/themes/original/src/components/BusinessController/index.tsx +35 -44
- package/themes/original/src/components/BusinessController/styles.tsx +12 -5
- package/themes/original/src/components/BusinessFeaturedController/index.tsx +21 -54
- package/themes/original/src/components/BusinessFeaturedController/styles.tsx +8 -0
- package/themes/original/src/components/BusinessInformation/index.tsx +140 -85
- package/themes/original/src/components/BusinessItemAccordion/index.tsx +15 -20
- package/themes/original/src/components/BusinessListingSearch/index.tsx +346 -340
- package/themes/original/src/components/BusinessListingSearch/styles.tsx +0 -18
- package/themes/original/src/components/BusinessPreorder/index.tsx +103 -19
- package/themes/original/src/components/BusinessProductsCategories/index.tsx +1 -2
- package/themes/original/src/components/BusinessProductsList/index.tsx +15 -7
- package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
- package/themes/original/src/components/BusinessProductsListing/UpsellingRedirect.tsx +1 -1
- package/themes/original/src/components/BusinessProductsListing/index.tsx +664 -556
- package/themes/original/src/components/BusinessProductsListing/styles.tsx +2 -3
- package/themes/original/src/components/BusinessReviews/index.tsx +3 -1
- package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListFooter.tsx +69 -0
- package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListHeader.tsx +406 -0
- package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListing.tsx +76 -0
- package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +37 -404
- package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
- package/themes/original/src/components/Cart/index.tsx +55 -55
- package/themes/original/src/components/CartContent/index.tsx +103 -59
- package/themes/original/src/components/CartContent/styles.tsx +6 -6
- package/themes/original/src/components/Checkout/index.tsx +276 -32
- package/themes/original/src/components/CitiesControl/index.tsx +1 -1
- package/themes/original/src/components/CouponControl/index.tsx +10 -3
- package/themes/original/src/components/DriverTips/index.tsx +12 -4
- package/themes/original/src/components/FacebookLogin/styles.tsx +3 -1
- package/themes/original/src/components/Favorite/index.tsx +1 -5
- package/themes/original/src/components/GPSButton/index.tsx +6 -4
- package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +8 -3
- package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +42 -5
- package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +2 -0
- package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +86 -10
- package/themes/original/src/components/GoogleLogin/styles.tsx +1 -1
- package/themes/original/src/components/GoogleMap/index.tsx +63 -7
- package/themes/original/src/components/Home/index.tsx +13 -4
- package/themes/original/src/components/LastOrder/index.tsx +2 -1
- package/themes/original/src/components/LastOrders/index.tsx +2 -1
- package/themes/original/src/components/LoginForm/Otp/index.tsx +91 -25
- package/themes/original/src/components/LoginForm/index.tsx +64 -34
- package/themes/original/src/components/LottieAnimation/index.tsx +88 -63
- package/themes/original/src/components/MessageListing/index.tsx +9 -2
- package/themes/original/src/components/Messages/index.tsx +15 -4
- package/themes/original/src/components/MomentOption/index.tsx +193 -92
- package/themes/original/src/components/MomentSelector/index.tsx +1 -1
- package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +161 -49
- package/themes/original/src/components/MultiCheckout/index.tsx +373 -69
- package/themes/original/src/components/MultiCheckout/styles.tsx +3 -1
- package/themes/original/src/components/MultiOrdersDetails/index.tsx +1 -1
- package/themes/original/src/components/MyOrders/index.tsx +12 -1
- package/themes/original/src/components/NavBar/index.tsx +20 -13
- package/themes/original/src/components/NotFoundSource/index.tsx +14 -10
- package/themes/original/src/components/OrderDetails/OrderEta.tsx +76 -0
- package/themes/original/src/components/OrderDetails/OrderHistory.tsx +21 -5
- package/themes/original/src/components/OrderDetails/index.tsx +50 -38
- package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
- package/themes/original/src/components/OrderItAgain/index.tsx +3 -1
- package/themes/original/src/components/OrderProgress/index.tsx +34 -25
- package/themes/original/src/components/OrderSummary/index.tsx +83 -57
- package/themes/original/src/components/OrderTypeSelector/index.tsx +5 -6
- package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +13 -13
- package/themes/original/src/components/OrdersOption/index.tsx +43 -20
- package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
- package/themes/original/src/components/PageBanner/index.tsx +65 -29
- package/themes/original/src/components/PageBanner/styles.tsx +0 -3
- package/themes/original/src/components/PaymentOptionCard/index.tsx +180 -0
- package/themes/original/src/components/PaymentOptionStripe/styles.tsx +3 -0
- package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
- package/themes/original/src/components/PaymentOptions/index.tsx +100 -34
- package/themes/original/src/components/PhoneInputNumber/index.tsx +18 -4
- package/themes/original/src/components/ProductForm/index.tsx +86 -30
- package/themes/original/src/components/ProductForm/styles.tsx +3 -3
- package/themes/original/src/components/ProductItemAccordion/index.tsx +8 -6
- package/themes/original/src/components/ProductOptionSubOption/index.tsx +49 -20
- package/themes/original/src/components/ProductOptionSubOption/styles.tsx +10 -9
- package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
- package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -50
- package/themes/original/src/components/ProfessionalProfile/index.tsx +36 -7
- package/themes/original/src/components/Promotions/index.tsx +2 -2
- package/themes/original/src/components/Promotions/styles.tsx +3 -1
- package/themes/original/src/components/ReviewProducts/index.tsx +16 -7
- package/themes/original/src/components/ScheduleAccordion/index.tsx +3 -3
- package/themes/original/src/components/ServiceForm/index.tsx +63 -20
- package/themes/original/src/components/SignupForm/index.tsx +43 -27
- package/themes/original/src/components/SingleOrderCard/index.tsx +44 -20
- package/themes/original/src/components/SingleOrderCard/styles.tsx +1 -1
- package/themes/original/src/components/SingleProductCard/index.tsx +13 -10
- package/themes/original/src/components/SingleProductCard/styles.tsx +8 -3
- package/themes/original/src/components/SingleProductReview/styles.tsx +1 -1
- package/themes/original/src/components/StripeCardsList/index.tsx +61 -5
- package/themes/original/src/components/StripeElementsForm/index.tsx +48 -34
- package/themes/original/src/components/StripeElementsForm/naked.tsx +12 -1
- package/themes/original/src/components/UpsellingProducts/index.tsx +5 -10
- package/themes/original/src/components/UserDetails/index.tsx +3 -1
- package/themes/original/src/components/UserFormDetails/index.tsx +78 -9
- package/themes/original/src/components/UserFormDetails/styles.tsx +1 -1
- package/themes/original/src/components/UserProfile/index.tsx +7 -25
- package/themes/original/src/components/UserProfileForm/index.tsx +30 -31
- package/themes/original/src/components/UserVerification/index.tsx +55 -50
- package/themes/original/src/components/WalletTransactionItem/index.tsx +2 -2
- package/themes/original/src/components/WalletTransactions/index.tsx +3 -3
- package/themes/original/src/components/Wallets/index.tsx +51 -61
- package/themes/original/src/components/Wallets/styles.tsx +2 -4
- package/themes/original/src/components/shared/OButton.tsx +3 -3
- package/themes/original/src/components/shared/OInput.tsx +4 -5
- package/themes/original/src/components/shared/OModal.tsx +3 -3
- package/themes/original/src/types/index.tsx +37 -10
- package/themes/original/src/utils/index.tsx +185 -13
- package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
- package/src/navigators/BottomNavigator.tsx +0 -117
- package/src/navigators/CheckoutNavigator.tsx +0 -66
- package/src/navigators/HomeNavigator.tsx +0 -202
- package/src/navigators/NavigationRef.tsx +0 -7
- package/src/navigators/RootNavigator.tsx +0 -269
- package/src/pages/Account.tsx +0 -34
- package/src/pages/AddressForm.tsx +0 -62
- package/src/pages/AddressList.tsx +0 -24
- package/src/pages/BusinessProductsList.tsx +0 -81
- package/src/pages/BusinessesListing.tsx +0 -43
- package/src/pages/CartList.tsx +0 -49
- package/src/pages/Checkout.tsx +0 -101
- package/src/pages/ForgotPassword.tsx +0 -24
- package/src/pages/Help.tsx +0 -23
- package/src/pages/HelpAccountAndPayment.tsx +0 -23
- package/src/pages/HelpGuide.tsx +0 -23
- package/src/pages/HelpOrder.tsx +0 -23
- package/src/pages/Home.tsx +0 -36
- package/src/pages/IntroductoryTutorial.tsx +0 -170
- package/src/pages/Login.tsx +0 -47
- package/src/pages/MomentOption.tsx +0 -30
- package/src/pages/MultiCheckout.tsx +0 -31
- package/src/pages/MultiOrdersDetails.tsx +0 -27
- package/src/pages/MyOrders.tsx +0 -40
- package/src/pages/NetworkError.tsx +0 -24
- package/src/pages/NotFound.tsx +0 -22
- package/src/pages/OrderDetails.tsx +0 -25
- package/src/pages/ProductDetails.tsx +0 -55
- package/src/pages/Profile.tsx +0 -36
- package/src/pages/ReviewDriver.tsx +0 -30
- package/src/pages/ReviewOrder.tsx +0 -32
- package/src/pages/ReviewProducts.tsx +0 -30
- package/src/pages/Sessions.tsx +0 -22
- package/src/pages/Signup.tsx +0 -53
- package/src/pages/SpinnerLoader.tsx +0 -10
- package/src/pages/Splash.tsx +0 -21
|
@@ -9,8 +9,7 @@ import {
|
|
|
9
9
|
I18nManager,
|
|
10
10
|
SafeAreaView,
|
|
11
11
|
Platform,
|
|
12
|
-
Button
|
|
13
|
-
Vibration
|
|
12
|
+
Button
|
|
14
13
|
} from 'react-native';
|
|
15
14
|
import {
|
|
16
15
|
ProductForm as ProductOptions,
|
|
@@ -19,8 +18,11 @@ import {
|
|
|
19
18
|
useOrder,
|
|
20
19
|
useUtils,
|
|
21
20
|
ToastType,
|
|
22
|
-
useToast
|
|
21
|
+
useToast,
|
|
22
|
+
useConfig,
|
|
23
|
+
useEvent
|
|
23
24
|
} from 'ordering-components/native';
|
|
25
|
+
import uuid from 'react-native-uuid';
|
|
24
26
|
import { useTheme } from 'styled-components/native';
|
|
25
27
|
import { ProductIngredient } from '../ProductIngredient';
|
|
26
28
|
import { ProductOption } from '../ProductOption';
|
|
@@ -28,6 +30,7 @@ import Swiper from 'react-native-swiper'
|
|
|
28
30
|
import FastImage from 'react-native-fast-image';
|
|
29
31
|
import IconAntDesign from 'react-native-vector-icons/AntDesign';
|
|
30
32
|
import YoutubePlayer from "react-native-youtube-iframe"
|
|
33
|
+
import ReactNativeHapticFeedback from "react-native-haptic-feedback";
|
|
31
34
|
|
|
32
35
|
import {
|
|
33
36
|
WrapHeader,
|
|
@@ -52,6 +55,7 @@ import { ProductOptionSubOption } from '../ProductOptionSubOption';
|
|
|
52
55
|
import { NotFoundSource } from '../NotFoundSource';
|
|
53
56
|
import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder';
|
|
54
57
|
import NavBar from '../NavBar';
|
|
58
|
+
import { orderTypeList, vibrateApp } from '../../utils';
|
|
55
59
|
const windowWidth = Dimensions.get('window').width;
|
|
56
60
|
|
|
57
61
|
export const ProductOptionsUI = (props: any) => {
|
|
@@ -71,11 +75,14 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
71
75
|
handleChangeSuboptionState,
|
|
72
76
|
handleChangeCommentState,
|
|
73
77
|
productObject,
|
|
74
|
-
productAddedToCartLength
|
|
78
|
+
productAddedToCartLength,
|
|
79
|
+
actionStatus,
|
|
80
|
+
handleCreateGuestUser
|
|
75
81
|
} = props;
|
|
76
82
|
|
|
77
83
|
const theme = useTheme();
|
|
78
84
|
const [, { showToast }] = useToast()
|
|
85
|
+
const [events] = useEvent()
|
|
79
86
|
|
|
80
87
|
const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
|
|
81
88
|
|
|
@@ -130,7 +137,8 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
130
137
|
},
|
|
131
138
|
slide1: {
|
|
132
139
|
flex: 1,
|
|
133
|
-
alignItems: 'center'
|
|
140
|
+
alignItems: 'center',
|
|
141
|
+
width: '100%',
|
|
134
142
|
},
|
|
135
143
|
mainSwiper: {
|
|
136
144
|
height: 258,
|
|
@@ -169,7 +177,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
169
177
|
marginTop: 10
|
|
170
178
|
},
|
|
171
179
|
wrapperNavbar: {
|
|
172
|
-
paddingHorizontal:
|
|
180
|
+
paddingHorizontal: 30,
|
|
173
181
|
paddingTop: 0,
|
|
174
182
|
}
|
|
175
183
|
});
|
|
@@ -178,6 +186,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
178
186
|
const [, t] = useLanguage();
|
|
179
187
|
const [orderState] = useOrder();
|
|
180
188
|
const [{ auth }] = useSession();
|
|
189
|
+
const [{ configs }] = useConfig()
|
|
181
190
|
const { product, loading, error } = productObject;
|
|
182
191
|
const [gallery, setGallery] = useState([])
|
|
183
192
|
const [thumbsSwiper, setThumbsSwiper] = useState(0)
|
|
@@ -197,6 +206,19 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
197
206
|
const [summaryRefHeight, setSummaryRefHeight] = useState(0)
|
|
198
207
|
const [isScrollAvailable, setIsScrollAvailable] = useState(null)
|
|
199
208
|
const [editionsLayoutY, setEditionsLayoutY] = useState(null)
|
|
209
|
+
const [viewedProduct, setViewedProduct] = useState<any>(null)
|
|
210
|
+
const [showTitle, setShowTitle] = useState(false)
|
|
211
|
+
|
|
212
|
+
const guestCheckoutEnabled = configs?.guest_checkout_enabled?.value === '1'
|
|
213
|
+
const orderTypeEnabled = !orderTypeList[orderState?.options?.type - 1] || configs?.allowed_order_types_guest_checkout?.value?.includes(orderTypeList[orderState?.options?.type - 1])
|
|
214
|
+
|
|
215
|
+
const vibrateApp = (impact?: string) => {
|
|
216
|
+
const options = {
|
|
217
|
+
enableVibrateFallback: true,
|
|
218
|
+
ignoreAndroidSystemSettings: false
|
|
219
|
+
};
|
|
220
|
+
ReactNativeHapticFeedback.trigger(impact || "impactLight", options);
|
|
221
|
+
}
|
|
200
222
|
|
|
201
223
|
const isError = (id: number) => {
|
|
202
224
|
let bgColor = theme.colors.white;
|
|
@@ -213,7 +235,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
213
235
|
};
|
|
214
236
|
|
|
215
237
|
const handleSaveProduct = () => {
|
|
216
|
-
|
|
238
|
+
vibrateApp()
|
|
217
239
|
if (!productCart.quantity) {
|
|
218
240
|
showToast(ToastType.Error, t('VALIDATION_ERROR_REQUIRED', 'The quantity field is required').replace('_attribute_', t('PRODUCT_POTIONS_QUANTITY', 'Quantity')))
|
|
219
241
|
return
|
|
@@ -294,6 +316,11 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
294
316
|
}
|
|
295
317
|
}
|
|
296
318
|
|
|
319
|
+
const handleUpdateGuest = () => {
|
|
320
|
+
const guestToken = uuid.v4()
|
|
321
|
+
if (guestToken) handleCreateGuestUser({ guest_token: guestToken })
|
|
322
|
+
}
|
|
323
|
+
|
|
297
324
|
const handleOnLayout = (event: any, optionId: any) => {
|
|
298
325
|
const _optionLayout = { ...optionLayout }
|
|
299
326
|
const optionKey = 'id:' + optionId
|
|
@@ -345,12 +372,8 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
345
372
|
</>
|
|
346
373
|
);
|
|
347
374
|
|
|
348
|
-
const handleScroll = ({ nativeEvent: { contentOffset
|
|
349
|
-
|
|
350
|
-
const _topOption = Object.keys(optionLayout).find(((option: any) => Math.abs(contentOffset?.y - layoutMeasurement?.height - optionLayout[option]?.y) < 20))
|
|
351
|
-
if (_topOption) {
|
|
352
|
-
const _topOptionId = Number(_topOption.replace('id:', ''))
|
|
353
|
-
}
|
|
375
|
+
const handleScroll = ({ nativeEvent: { contentOffset } }: any) => {
|
|
376
|
+
setShowTitle(contentOffset.y > 30)
|
|
354
377
|
}
|
|
355
378
|
|
|
356
379
|
const handleGoBack = navigation?.canGoBack()
|
|
@@ -467,14 +490,27 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
467
490
|
: t('LOGIN_SIGNUP', 'Login / Sign Up')
|
|
468
491
|
}
|
|
469
492
|
imgRightSrc=""
|
|
470
|
-
textStyle={{ color: theme.colors.primary, fontSize:
|
|
493
|
+
textStyle={{ color: theme.colors.primary, fontSize: 13, textAlign: 'center' }}
|
|
471
494
|
style={{
|
|
472
|
-
height:
|
|
495
|
+
height: 42,
|
|
473
496
|
borderColor: theme.colors.primary,
|
|
474
497
|
backgroundColor: theme.colors.white,
|
|
498
|
+
paddingLeft: 0,
|
|
499
|
+
paddingRight: 0
|
|
475
500
|
}}
|
|
476
501
|
/>
|
|
477
502
|
)}
|
|
503
|
+
{!auth && guestCheckoutEnabled && orderTypeEnabled && (
|
|
504
|
+
<TouchableOpacity style={{ marginTop: 10 }} onPress={handleUpdateGuest}>
|
|
505
|
+
{actionStatus?.loading ? (
|
|
506
|
+
<Placeholder Animation={Fade}>
|
|
507
|
+
<PlaceholderLine height={20} />
|
|
508
|
+
</Placeholder>
|
|
509
|
+
) : (
|
|
510
|
+
<OText color={theme.colors.primary} size={13} style={{ textAlign: 'center' }}>{t('AS_GUEST_USER', 'As guest user')}</OText>
|
|
511
|
+
)}
|
|
512
|
+
</TouchableOpacity>
|
|
513
|
+
)}
|
|
478
514
|
</View>
|
|
479
515
|
)
|
|
480
516
|
}
|
|
@@ -488,21 +524,43 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
488
524
|
}
|
|
489
525
|
}, [])
|
|
490
526
|
|
|
527
|
+
useEffect(() => {
|
|
528
|
+
if (!product?.id || product?.id === viewedProduct?.id) return
|
|
529
|
+
setViewedProduct(product)
|
|
530
|
+
events.emit('product_viewed', product)
|
|
531
|
+
}, [product?.id, viewedProduct])
|
|
532
|
+
|
|
491
533
|
return (
|
|
492
534
|
<SafeAreaView style={{ flex: 1 }}>
|
|
493
535
|
<View style={styles.wrapperNavbar}>
|
|
494
|
-
<
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
536
|
+
<TopHeader>
|
|
537
|
+
<>
|
|
538
|
+
<TopActions onPress={() => handleGoBack()}>
|
|
539
|
+
<IconAntDesign
|
|
540
|
+
name='arrowleft'
|
|
541
|
+
size={26}
|
|
542
|
+
/>
|
|
543
|
+
</TopActions>
|
|
544
|
+
{showTitle && (
|
|
545
|
+
<OText
|
|
546
|
+
size={16}
|
|
547
|
+
style={{ flex: 1, textAlign: 'center' }}
|
|
548
|
+
weight={Platform.OS === 'ios' ? '600' : 'bold'}
|
|
549
|
+
numberOfLines={2}
|
|
550
|
+
ellipsizeMode='tail'
|
|
551
|
+
>
|
|
552
|
+
{product?.name}
|
|
553
|
+
</OText>
|
|
554
|
+
)}
|
|
555
|
+
</>
|
|
556
|
+
</TopHeader>
|
|
500
557
|
</View>
|
|
501
558
|
{!error && (
|
|
502
559
|
<ScrollView
|
|
503
560
|
ref={scrollViewRef}
|
|
504
561
|
contentContainerStyle={{ paddingBottom: 80 }}
|
|
505
562
|
stickyHeaderIndices={[2]}
|
|
563
|
+
scrollEventThrottle={100}
|
|
506
564
|
onScroll={handleScroll}
|
|
507
565
|
>
|
|
508
566
|
<WrapHeader onLayout={(event: any) => setHeaderRefHeight(event.nativeEvent.layout?.height)}>
|
|
@@ -630,7 +688,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
630
688
|
)}
|
|
631
689
|
</WrapHeader>
|
|
632
690
|
<ProductSummary
|
|
633
|
-
ph={isChewLayout ? 20 :
|
|
691
|
+
ph={isChewLayout ? 20 : 30}
|
|
634
692
|
onLayout={(event: any) => setSummaryRefHeight(event.nativeEvent.layout?.height)}
|
|
635
693
|
>
|
|
636
694
|
<ProductTitle>
|
|
@@ -700,6 +758,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
700
758
|
</ProductDescription>
|
|
701
759
|
<ScrollView
|
|
702
760
|
horizontal
|
|
761
|
+
scrollEventThrottle={100}
|
|
703
762
|
showsHorizontalScrollIndicator={false}
|
|
704
763
|
contentContainerStyle={{ paddingBottom: 30 }}
|
|
705
764
|
>
|
|
@@ -727,12 +786,13 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
727
786
|
{(!loading && product) && (
|
|
728
787
|
<ExtraOptionWrap
|
|
729
788
|
horizontal
|
|
789
|
+
scrollEventThrottle={100}
|
|
730
790
|
showsHorizontalScrollIndicator={false}
|
|
731
791
|
style={{
|
|
732
792
|
marginBottom: 20,
|
|
733
793
|
borderBottomWidth: 1,
|
|
734
794
|
borderBottomColor: theme.colors.border,
|
|
735
|
-
marginHorizontal:
|
|
795
|
+
marginHorizontal: 20,
|
|
736
796
|
backgroundColor: theme.colors.backgroundPage,
|
|
737
797
|
}}
|
|
738
798
|
>
|
|
@@ -806,7 +866,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
806
866
|
</>
|
|
807
867
|
) : (
|
|
808
868
|
<ProductEditions
|
|
809
|
-
style={{ paddingHorizontal: isChewLayout ? 20 :
|
|
869
|
+
style={{ paddingHorizontal: isChewLayout ? 20 : 30 }}
|
|
810
870
|
onLayout={(event: any) => {
|
|
811
871
|
setEditionsLayoutY(event.nativeEvent.layout?.y)
|
|
812
872
|
}}
|
|
@@ -853,12 +913,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
853
913
|
}}>
|
|
854
914
|
{option?.suboptions?.sort((a: any, b: any) => a.rank - b.rank).map(
|
|
855
915
|
(suboption: any) => {
|
|
856
|
-
const currentState =
|
|
857
|
-
productCart.options[
|
|
858
|
-
`id:${option.id}`
|
|
859
|
-
]?.suboptions[
|
|
860
|
-
`id:${suboption.id}`
|
|
861
|
-
] || {};
|
|
916
|
+
const currentState = productCart.options[`id:${option.id}`]?.suboptions[`id:${suboption.id}`] || {};
|
|
862
917
|
const balance =
|
|
863
918
|
productCart.options[
|
|
864
919
|
`id:${option.id}`
|
|
@@ -873,6 +928,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
873
928
|
balance={balance}
|
|
874
929
|
option={option}
|
|
875
930
|
suboption={suboption}
|
|
931
|
+
image={suboption.image}
|
|
876
932
|
state={currentState}
|
|
877
933
|
disabled={
|
|
878
934
|
isSoldOut ||
|
|
@@ -8,8 +8,8 @@ export const WrapHeader = styled.View`
|
|
|
8
8
|
export const TopActions = styled.TouchableOpacity`
|
|
9
9
|
height: 60px;
|
|
10
10
|
justify-content: center;
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
min-width: 30px;
|
|
12
|
+
padding-right: 15px;
|
|
13
13
|
`;
|
|
14
14
|
|
|
15
15
|
export const TopHeader = styled.View`
|
|
@@ -70,7 +70,7 @@ export const ProductActions = styled.View`
|
|
|
70
70
|
position: absolute;
|
|
71
71
|
bottom: 0px;
|
|
72
72
|
padding-top: ${(props: any) => props.ios ? '20px' : '0'};
|
|
73
|
-
padding-horizontal:
|
|
73
|
+
padding-horizontal: 30px;
|
|
74
74
|
padding-vertical: 20px;
|
|
75
75
|
width: 100%;
|
|
76
76
|
flex-direction: ${(props: any) => props.isColumn ? 'column' : 'row'};
|
|
@@ -77,6 +77,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
|
|
|
77
77
|
const [isServiceOpen, setIsServiceOpen] = useState(false)
|
|
78
78
|
// const [setHeight, setHeightState] = useState({ height: new Animated.Value(0) })
|
|
79
79
|
// const [setRotate, setRotateState] = useState({ angle: new Animated.Value(0) })
|
|
80
|
+
const [productQuantity, setProductQuantity] = useState(product.quantity.toString())
|
|
80
81
|
|
|
81
82
|
const productInfo = () => {
|
|
82
83
|
if (isCartProduct) {
|
|
@@ -107,19 +108,20 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
|
|
|
107
108
|
/* const toggleAccordion = () => {
|
|
108
109
|
if ((!product?.valid_menu && isCartProduct)) return
|
|
109
110
|
if (isActive) {
|
|
110
|
-
|
|
111
|
+
Animated.timing(setHeight.height, {
|
|
111
112
|
toValue: 100,
|
|
112
113
|
duration: 500,
|
|
113
114
|
easing: Easing.linear,
|
|
114
115
|
useNativeDriver: false,
|
|
115
|
-
|
|
116
|
+
}).start()
|
|
116
117
|
} else {
|
|
117
|
-
|
|
118
|
+
setHeightState({height: new Animated.Value(0)})
|
|
118
119
|
}
|
|
119
120
|
}*/
|
|
120
121
|
|
|
121
122
|
const handleChangeQuantity = (value: string) => {
|
|
122
123
|
if (!orderState.loading) {
|
|
124
|
+
setProductQuantity(value)
|
|
123
125
|
if (parseInt(value) === 0) {
|
|
124
126
|
onDeleteProduct && onDeleteProduct(product)
|
|
125
127
|
} else {
|
|
@@ -134,7 +136,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
|
|
|
134
136
|
}
|
|
135
137
|
|
|
136
138
|
/*useEffect(() => {
|
|
137
|
-
|
|
139
|
+
toggleAccordion()
|
|
138
140
|
}, [isActive])*/
|
|
139
141
|
|
|
140
142
|
const productOptions = getProductMax && [...Array(getProductMax(product) + 1),].map((_: any, opt: number) => {
|
|
@@ -209,7 +211,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
|
|
|
209
211
|
<RNPickerSelect
|
|
210
212
|
items={productOptions}
|
|
211
213
|
onValueChange={handleChangeQuantity}
|
|
212
|
-
value={
|
|
214
|
+
value={productQuantity}
|
|
213
215
|
style={pickerStyle}
|
|
214
216
|
useNativeAndroidPickerStyle={false}
|
|
215
217
|
placeholder={{}}
|
|
@@ -287,7 +289,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
|
|
|
287
289
|
)}
|
|
288
290
|
{productInfo().options.length > 0 && (
|
|
289
291
|
<ProductOptionsList>
|
|
290
|
-
{productInfo().options.map((option: any, i: number) => (
|
|
292
|
+
{productInfo().options.sort((a: any, b: any) => a.rank - b.rank).map((option: any, i: number) => (
|
|
291
293
|
<ProductOption key={option.id + i}>
|
|
292
294
|
<OText size={10} color={theme.colors.textSecondary}>{option.name}</OText>
|
|
293
295
|
{option.suboptions.map((suboption: any) => (
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
import { useTheme } from 'styled-components/native';
|
|
8
8
|
import { StyleSheet, View } from 'react-native'
|
|
9
9
|
import IconAntDesign from 'react-native-vector-icons/AntDesign';
|
|
10
|
+
import FastImage from 'react-native-fast-image';
|
|
10
11
|
|
|
11
12
|
import {
|
|
12
13
|
Container,
|
|
@@ -14,7 +15,8 @@ import {
|
|
|
14
15
|
QuantityControl,
|
|
15
16
|
Checkbox,
|
|
16
17
|
PositionControl,
|
|
17
|
-
Circle
|
|
18
|
+
Circle,
|
|
19
|
+
Logo
|
|
18
20
|
} from './styles'
|
|
19
21
|
import { OIcon, OText } from '../shared'
|
|
20
22
|
|
|
@@ -29,7 +31,8 @@ export const ProductOptionSubOptionUI = (props: any) => {
|
|
|
29
31
|
toggleSelect,
|
|
30
32
|
changePosition,
|
|
31
33
|
disabled,
|
|
32
|
-
setIsScrollAvailable
|
|
34
|
+
setIsScrollAvailable,
|
|
35
|
+
image
|
|
33
36
|
} = props
|
|
34
37
|
|
|
35
38
|
const disableIncrement = option?.limit_suboptions_by_max ? balance === option?.max || state.quantity === suboption?.max : state.quantity === suboption?.max || (!state.selected && balance === option?.max)
|
|
@@ -37,12 +40,23 @@ export const ProductOptionSubOptionUI = (props: any) => {
|
|
|
37
40
|
|
|
38
41
|
const theme = useTheme();
|
|
39
42
|
const [, t] = useLanguage()
|
|
40
|
-
const [{ parsePrice }] = useUtils()
|
|
43
|
+
const [{ parsePrice, optimizeImage }] = useUtils()
|
|
41
44
|
const [showMessage, setShowMessage] = useState(false)
|
|
42
45
|
const [isDirty, setIsDirty] = useState(false)
|
|
43
46
|
|
|
44
|
-
const
|
|
45
|
-
|
|
47
|
+
const iconsSize = 20
|
|
48
|
+
|
|
49
|
+
const styles = StyleSheet.create({
|
|
50
|
+
icon: {
|
|
51
|
+
borderRadius: 7.6,
|
|
52
|
+
width: 60,
|
|
53
|
+
height: 60
|
|
54
|
+
},
|
|
55
|
+
logo: {
|
|
56
|
+
borderRadius: 10,
|
|
57
|
+
marginLeft: 3,
|
|
58
|
+
},
|
|
59
|
+
});
|
|
46
60
|
|
|
47
61
|
const handleSuboptionClick = () => {
|
|
48
62
|
toggleSelect()
|
|
@@ -68,7 +82,7 @@ export const ProductOptionSubOptionUI = (props: any) => {
|
|
|
68
82
|
|
|
69
83
|
return (
|
|
70
84
|
<View>
|
|
71
|
-
<Container>
|
|
85
|
+
<Container onPress={!(option?.with_half_option || option?.allow_suboption_quantity) ? () => handleSuboptionClick() : null}>
|
|
72
86
|
<IconControl disabled={disabled} onPress={() => handleSuboptionClick()}>
|
|
73
87
|
{((option?.min === 0 && option?.max === 1) || option?.max > 1) ? (
|
|
74
88
|
state?.selected ? (
|
|
@@ -83,12 +97,24 @@ export const ProductOptionSubOptionUI = (props: any) => {
|
|
|
83
97
|
<OIcon src={theme.images.general.radio_nor} color={theme.colors.disabled} width={16} />
|
|
84
98
|
)
|
|
85
99
|
)}
|
|
86
|
-
|
|
100
|
+
{image && (
|
|
101
|
+
<Logo style={styles.logo}>
|
|
102
|
+
<FastImage
|
|
103
|
+
style={styles.icon}
|
|
104
|
+
source={{
|
|
105
|
+
uri: optimizeImage(image, 'h_100,c_limit'),
|
|
106
|
+
priority: FastImage.priority.normal,
|
|
107
|
+
}}
|
|
108
|
+
resizeMode={FastImage.resizeMode.cover}
|
|
109
|
+
/>
|
|
110
|
+
</Logo>
|
|
111
|
+
)}
|
|
112
|
+
<OText size={12} lineHeight={18} color={theme.colors.textSecondary} mLeft={5} style={{ flex: 1 }}>
|
|
87
113
|
{suboption?.name}
|
|
88
114
|
</OText>
|
|
89
115
|
</IconControl>
|
|
90
|
-
|
|
91
|
-
|
|
116
|
+
{option?.allow_suboption_quantity && state?.selected && (
|
|
117
|
+
<QuantityControl>
|
|
92
118
|
<>
|
|
93
119
|
<Checkbox disabled={disabled || state.quantity === 0} onPress={decrement}>
|
|
94
120
|
<IconAntDesign
|
|
@@ -97,7 +123,7 @@ export const ProductOptionSubOptionUI = (props: any) => {
|
|
|
97
123
|
color={state.quantity === 0 || disabled ? theme.colors.disabled : theme.colors.primary}
|
|
98
124
|
/>
|
|
99
125
|
</Checkbox>
|
|
100
|
-
<OText size={12}
|
|
126
|
+
<OText size={12}>
|
|
101
127
|
{state.quantity}
|
|
102
128
|
</OText>
|
|
103
129
|
<Checkbox disabled={disabled || disableIncrement} onPress={increment}>
|
|
@@ -108,16 +134,17 @@ export const ProductOptionSubOptionUI = (props: any) => {
|
|
|
108
134
|
/>
|
|
109
135
|
</Checkbox>
|
|
110
136
|
</>
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
137
|
+
</QuantityControl>
|
|
138
|
+
)}
|
|
139
|
+
{option?.with_half_option && state?.selected && (
|
|
140
|
+
<PositionControl>
|
|
115
141
|
<>
|
|
116
142
|
<Circle disabled={disabled} onPress={() => changePosition('left')}>
|
|
117
143
|
<OIcon
|
|
118
144
|
src={theme.images.general.half_l}
|
|
119
145
|
color={state.selected && state.position === 'left' ? theme.colors.primary : '#cbcbcb'}
|
|
120
|
-
width={
|
|
146
|
+
width={20}
|
|
147
|
+
height={20}
|
|
121
148
|
style={styles.inverse}
|
|
122
149
|
/>
|
|
123
150
|
</Circle>
|
|
@@ -125,21 +152,23 @@ export const ProductOptionSubOptionUI = (props: any) => {
|
|
|
125
152
|
<OIcon
|
|
126
153
|
src={theme.images.general.half_f}
|
|
127
154
|
color={state.selected && state.position === 'whole' ? theme.colors.primary : '#cbcbcb'}
|
|
128
|
-
width={
|
|
155
|
+
width={20}
|
|
156
|
+
height={20}
|
|
129
157
|
/>
|
|
130
158
|
</Circle>
|
|
131
159
|
<Circle disabled={disabled} onPress={() => changePosition('right')}>
|
|
132
160
|
<OIcon
|
|
133
161
|
src={theme.images.general.half_r}
|
|
134
162
|
color={state.selected && state.position === 'right' ? theme.colors.primary : '#cbcbcb'}
|
|
135
|
-
width={
|
|
163
|
+
width={20}
|
|
164
|
+
height={20}
|
|
136
165
|
/>
|
|
137
166
|
</Circle>
|
|
138
167
|
</>
|
|
139
|
-
|
|
140
|
-
|
|
168
|
+
</PositionControl>
|
|
169
|
+
)}
|
|
141
170
|
{price > 0 && (
|
|
142
|
-
<OText size={12} lineHeight={18} color={theme.colors.textSecondary}>
|
|
171
|
+
<OText size={12} lineHeight={18} color={theme.colors.textSecondary} style={{ width: 70, maxWidth: 70 }}>
|
|
143
172
|
+ {parsePrice(price)}
|
|
144
173
|
</OText>
|
|
145
174
|
)}
|
|
@@ -4,35 +4,36 @@ export const Container = styled.TouchableOpacity`
|
|
|
4
4
|
flex-direction: row;
|
|
5
5
|
align-items: center;
|
|
6
6
|
justify-content: space-between;
|
|
7
|
-
padding: 10px;
|
|
8
7
|
width: 100%;
|
|
9
8
|
`
|
|
10
9
|
|
|
11
10
|
export const IconControl = styled.TouchableOpacity`
|
|
12
11
|
flex-direction: row;
|
|
13
|
-
|
|
12
|
+
padding: 10px 0 10px 10px;
|
|
13
|
+
width: 50%;
|
|
14
14
|
align-items: center;
|
|
15
15
|
`
|
|
16
16
|
|
|
17
17
|
export const QuantityControl = styled.View`
|
|
18
18
|
flex-direction: row;
|
|
19
19
|
align-items: center;
|
|
20
|
-
justify-content:
|
|
21
|
-
|
|
22
|
-
flex: 1;
|
|
23
|
-
width: 60px;
|
|
20
|
+
justify-content: space-between;
|
|
21
|
+
width: 62px;
|
|
24
22
|
`
|
|
25
23
|
|
|
26
24
|
export const PositionControl = styled.View`
|
|
27
25
|
flex-direction: row;
|
|
28
26
|
align-items: center;
|
|
29
|
-
margin-right: 5px;
|
|
30
|
-
flex: 1;
|
|
31
27
|
`
|
|
32
28
|
|
|
33
29
|
export const Checkbox = styled.TouchableOpacity`
|
|
34
30
|
`
|
|
35
31
|
|
|
36
32
|
export const Circle = styled.TouchableOpacity`
|
|
37
|
-
margin: 0
|
|
33
|
+
margin: 0 1.5px;
|
|
38
34
|
`
|
|
35
|
+
|
|
36
|
+
export const Logo = styled.View`
|
|
37
|
+
height: 65px;
|
|
38
|
+
width: 65px;
|
|
39
|
+
`;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import {
|
|
3
|
+
useSession,
|
|
4
|
+
useUtils,
|
|
5
|
+
SingleProfessionalCard as SingleProfessionalCardController
|
|
6
|
+
} from 'ordering-components/native'
|
|
7
|
+
import { useTheme } from 'styled-components/native'
|
|
8
|
+
import { StyleSheet, TouchableOpacity, View } from 'react-native'
|
|
9
|
+
import FastImage from 'react-native-fast-image'
|
|
10
|
+
import { OIcon, OText } from '../../shared'
|
|
11
|
+
import IconAntDesign from 'react-native-vector-icons/AntDesign';
|
|
12
|
+
|
|
13
|
+
const SingleProfessionalCardUI = (props) => {
|
|
14
|
+
const {
|
|
15
|
+
professional,
|
|
16
|
+
handleFavoriteProfessional,
|
|
17
|
+
active,
|
|
18
|
+
handleProfessionalClick
|
|
19
|
+
} = props
|
|
20
|
+
|
|
21
|
+
const theme = useTheme()
|
|
22
|
+
const [{ auth }] = useSession()
|
|
23
|
+
const [{ optimizeImage }] = useUtils()
|
|
24
|
+
|
|
25
|
+
const handleChangeFavorite = () => {
|
|
26
|
+
if (auth) {
|
|
27
|
+
handleFavoriteProfessional && handleFavoriteProfessional(!professional?.favorite)
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const styles = StyleSheet.create({
|
|
32
|
+
professionalItem: {
|
|
33
|
+
flexDirection: 'row',
|
|
34
|
+
alignItems: 'center',
|
|
35
|
+
borderRadius: 7.6,
|
|
36
|
+
padding: 11,
|
|
37
|
+
borderWidth: 1,
|
|
38
|
+
marginRight: 12,
|
|
39
|
+
minHeight: 64
|
|
40
|
+
},
|
|
41
|
+
photoStyle: {
|
|
42
|
+
width: 42,
|
|
43
|
+
height: 42,
|
|
44
|
+
borderRadius: 7.6
|
|
45
|
+
},
|
|
46
|
+
favoriteIconStyle: {
|
|
47
|
+
width: 16,
|
|
48
|
+
height: 16,
|
|
49
|
+
},
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
return (
|
|
53
|
+
<TouchableOpacity
|
|
54
|
+
onPress={() => handleProfessionalClick(professional)}
|
|
55
|
+
>
|
|
56
|
+
<View
|
|
57
|
+
style={{
|
|
58
|
+
...styles.professionalItem,
|
|
59
|
+
borderColor: active
|
|
60
|
+
? theme.colors.primary
|
|
61
|
+
: theme.colors.border
|
|
62
|
+
}}
|
|
63
|
+
>
|
|
64
|
+
{professional?.photo ? (
|
|
65
|
+
<FastImage
|
|
66
|
+
style={styles.photoStyle}
|
|
67
|
+
source={{
|
|
68
|
+
uri: optimizeImage(professional?.photo, 'h_250,c_limit'),
|
|
69
|
+
priority: FastImage.priority.normal,
|
|
70
|
+
}}
|
|
71
|
+
resizeMode={FastImage.resizeMode.cover}
|
|
72
|
+
/>
|
|
73
|
+
) : (
|
|
74
|
+
<OIcon
|
|
75
|
+
src={theme?.images?.general?.user}
|
|
76
|
+
cover={false}
|
|
77
|
+
style={styles.photoStyle}
|
|
78
|
+
/>
|
|
79
|
+
)}
|
|
80
|
+
<View style={{ marginLeft: 12 }}>
|
|
81
|
+
<OText
|
|
82
|
+
size={12}
|
|
83
|
+
weight={'400'}
|
|
84
|
+
>
|
|
85
|
+
{professional?.name} {professional?.lastname}
|
|
86
|
+
</OText>
|
|
87
|
+
|
|
88
|
+
<TouchableOpacity
|
|
89
|
+
onPress={() => handleChangeFavorite()}
|
|
90
|
+
>
|
|
91
|
+
{professional?.favorite
|
|
92
|
+
? <IconAntDesign name='heart' size={16} color={theme.colors.danger5} />
|
|
93
|
+
: <IconAntDesign name='hearto' size={16} color={theme.colors.danger5} />
|
|
94
|
+
}
|
|
95
|
+
</TouchableOpacity>
|
|
96
|
+
</View>
|
|
97
|
+
</View>
|
|
98
|
+
</TouchableOpacity>
|
|
99
|
+
)
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export const SingleProfessionalCard = (props) => {
|
|
103
|
+
const singleProfessionalCardProps = {
|
|
104
|
+
...props,
|
|
105
|
+
UIComponent: SingleProfessionalCardUI
|
|
106
|
+
}
|
|
107
|
+
return <SingleProfessionalCardController {...singleProfessionalCardProps} />
|
|
108
|
+
}
|