ordering-ui-react-native 0.17.97 → 0.17.98-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 +9 -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 +7 -2
- 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 +22 -94
- 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 +209 -15
- 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/OrdersListManager/index.tsx +7 -2
- package/themes/business/src/components/OrdersListManager/utils.tsx +1 -1
- package/themes/business/src/components/OrdersOption/index.tsx +60 -47
- 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 +21 -29
- 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/PreviousOrders/styles.tsx +10 -0
- 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/WebsocketStatus/index.tsx +171 -0
- package/themes/business/src/components/WebsocketStatus/styles.tsx +28 -0
- 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 +7 -3
- package/themes/original/src/components/AddressDetails/index.tsx +19 -3
- package/themes/original/src/components/AddressForm/index.tsx +33 -15
- 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 +21 -23
- package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +1 -1
- 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 +137 -32
- 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 +36 -403
- package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
- package/themes/original/src/components/Cart/index.tsx +44 -81
- package/themes/original/src/components/CartContent/index.tsx +70 -30
- package/themes/original/src/components/CartContent/styles.tsx +6 -6
- package/themes/original/src/components/Checkout/index.tsx +262 -35
- 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/DatePicker/index.tsx +17 -0
- package/themes/original/src/components/DatePicker/styles.tsx +20 -0
- 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 +84 -8
- 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 +41 -36
- package/themes/original/src/components/MomentOption/styles.tsx +0 -15
- 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 +347 -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 +59 -56
- 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 +65 -34
- 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 +40 -20
- package/themes/original/src/components/SignupForm/index.tsx +27 -16
- 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 +3 -8
- package/themes/original/src/components/UserDetails/index.tsx +3 -1
- package/themes/original/src/components/UserFormDetails/index.tsx +84 -19
- 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/config/constants.tsx +0 -10
- package/themes/original/src/types/index.tsx +31 -15
- package/themes/original/src/utils/index.tsx +180 -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,
|
|
@@ -20,7 +19,8 @@ import {
|
|
|
20
19
|
useUtils,
|
|
21
20
|
ToastType,
|
|
22
21
|
useToast,
|
|
23
|
-
useConfig
|
|
22
|
+
useConfig,
|
|
23
|
+
useEvent
|
|
24
24
|
} from 'ordering-components/native';
|
|
25
25
|
import uuid from 'react-native-uuid';
|
|
26
26
|
import { useTheme } from 'styled-components/native';
|
|
@@ -30,6 +30,7 @@ import Swiper from 'react-native-swiper'
|
|
|
30
30
|
import FastImage from 'react-native-fast-image';
|
|
31
31
|
import IconAntDesign from 'react-native-vector-icons/AntDesign';
|
|
32
32
|
import YoutubePlayer from "react-native-youtube-iframe"
|
|
33
|
+
import ReactNativeHapticFeedback from "react-native-haptic-feedback";
|
|
33
34
|
|
|
34
35
|
import {
|
|
35
36
|
WrapHeader,
|
|
@@ -54,7 +55,7 @@ import { ProductOptionSubOption } from '../ProductOptionSubOption';
|
|
|
54
55
|
import { NotFoundSource } from '../NotFoundSource';
|
|
55
56
|
import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder';
|
|
56
57
|
import NavBar from '../NavBar';
|
|
57
|
-
import { orderTypeList } from '../../utils';
|
|
58
|
+
import { orderTypeList, vibrateApp } from '../../utils';
|
|
58
59
|
const windowWidth = Dimensions.get('window').width;
|
|
59
60
|
|
|
60
61
|
export const ProductOptionsUI = (props: any) => {
|
|
@@ -81,6 +82,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
81
82
|
|
|
82
83
|
const theme = useTheme();
|
|
83
84
|
const [, { showToast }] = useToast()
|
|
85
|
+
const [events] = useEvent()
|
|
84
86
|
|
|
85
87
|
const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
|
|
86
88
|
|
|
@@ -135,7 +137,8 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
135
137
|
},
|
|
136
138
|
slide1: {
|
|
137
139
|
flex: 1,
|
|
138
|
-
alignItems: 'center'
|
|
140
|
+
alignItems: 'center',
|
|
141
|
+
width: '100%',
|
|
139
142
|
},
|
|
140
143
|
mainSwiper: {
|
|
141
144
|
height: 258,
|
|
@@ -174,7 +177,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
174
177
|
marginTop: 10
|
|
175
178
|
},
|
|
176
179
|
wrapperNavbar: {
|
|
177
|
-
paddingHorizontal:
|
|
180
|
+
paddingHorizontal: 30,
|
|
178
181
|
paddingTop: 0,
|
|
179
182
|
}
|
|
180
183
|
});
|
|
@@ -203,9 +206,19 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
203
206
|
const [summaryRefHeight, setSummaryRefHeight] = useState(0)
|
|
204
207
|
const [isScrollAvailable, setIsScrollAvailable] = useState(null)
|
|
205
208
|
const [editionsLayoutY, setEditionsLayoutY] = useState(null)
|
|
209
|
+
const [viewedProduct, setViewedProduct] = useState<any>(null)
|
|
210
|
+
const [showTitle, setShowTitle] = useState(false)
|
|
206
211
|
|
|
207
212
|
const guestCheckoutEnabled = configs?.guest_checkout_enabled?.value === '1'
|
|
208
|
-
|
|
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
|
+
}
|
|
209
222
|
|
|
210
223
|
const isError = (id: number) => {
|
|
211
224
|
let bgColor = theme.colors.white;
|
|
@@ -222,7 +235,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
222
235
|
};
|
|
223
236
|
|
|
224
237
|
const handleSaveProduct = () => {
|
|
225
|
-
|
|
238
|
+
vibrateApp()
|
|
226
239
|
if (!productCart.quantity) {
|
|
227
240
|
showToast(ToastType.Error, t('VALIDATION_ERROR_REQUIRED', 'The quantity field is required').replace('_attribute_', t('PRODUCT_POTIONS_QUANTITY', 'Quantity')))
|
|
228
241
|
return
|
|
@@ -308,6 +321,8 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
308
321
|
if (guestToken) handleCreateGuestUser({ guest_token: guestToken })
|
|
309
322
|
}
|
|
310
323
|
|
|
324
|
+
let _optionLayout: any = {}
|
|
325
|
+
|
|
311
326
|
const handleOnLayout = (event: any, optionId: any) => {
|
|
312
327
|
const _optionLayout = { ...optionLayout }
|
|
313
328
|
const optionKey = 'id:' + optionId
|
|
@@ -359,12 +374,8 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
359
374
|
</>
|
|
360
375
|
);
|
|
361
376
|
|
|
362
|
-
const handleScroll = ({ nativeEvent: { contentOffset
|
|
363
|
-
|
|
364
|
-
const _topOption = Object.keys(optionLayout).find(((option: any) => Math.abs(contentOffset?.y - layoutMeasurement?.height - optionLayout[option]?.y) < 20))
|
|
365
|
-
if (_topOption) {
|
|
366
|
-
const _topOptionId = Number(_topOption.replace('id:', ''))
|
|
367
|
-
}
|
|
377
|
+
const handleScroll = ({ nativeEvent: { contentOffset } }: any) => {
|
|
378
|
+
setShowTitle(contentOffset.y > 30)
|
|
368
379
|
}
|
|
369
380
|
|
|
370
381
|
const handleGoBack = navigation?.canGoBack()
|
|
@@ -481,9 +492,9 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
481
492
|
: t('LOGIN_SIGNUP', 'Login / Sign Up')
|
|
482
493
|
}
|
|
483
494
|
imgRightSrc=""
|
|
484
|
-
textStyle={{ color: theme.colors.primary, fontSize:
|
|
495
|
+
textStyle={{ color: theme.colors.primary, fontSize: 13, textAlign: 'center' }}
|
|
485
496
|
style={{
|
|
486
|
-
height:
|
|
497
|
+
height: 42,
|
|
487
498
|
borderColor: theme.colors.primary,
|
|
488
499
|
backgroundColor: theme.colors.white,
|
|
489
500
|
paddingLeft: 0,
|
|
@@ -495,10 +506,10 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
495
506
|
<TouchableOpacity style={{ marginTop: 10 }} onPress={handleUpdateGuest}>
|
|
496
507
|
{actionStatus?.loading ? (
|
|
497
508
|
<Placeholder Animation={Fade}>
|
|
498
|
-
<PlaceholderLine
|
|
509
|
+
<PlaceholderLine height={20} />
|
|
499
510
|
</Placeholder>
|
|
500
511
|
) : (
|
|
501
|
-
<OText color={theme.colors.primary} size={13}>{t('
|
|
512
|
+
<OText color={theme.colors.primary} size={13} style={{ textAlign: 'center' }}>{t('AS_GUEST_USER', 'As guest user')}</OText>
|
|
502
513
|
)}
|
|
503
514
|
</TouchableOpacity>
|
|
504
515
|
)}
|
|
@@ -515,21 +526,43 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
515
526
|
}
|
|
516
527
|
}, [])
|
|
517
528
|
|
|
529
|
+
useEffect(() => {
|
|
530
|
+
if (!product?.id || product?.id === viewedProduct?.id) return
|
|
531
|
+
setViewedProduct(product)
|
|
532
|
+
events.emit('product_viewed', product)
|
|
533
|
+
}, [product?.id, viewedProduct])
|
|
534
|
+
|
|
518
535
|
return (
|
|
519
536
|
<SafeAreaView style={{ flex: 1 }}>
|
|
520
537
|
<View style={styles.wrapperNavbar}>
|
|
521
|
-
<
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
538
|
+
<TopHeader>
|
|
539
|
+
<>
|
|
540
|
+
<TopActions onPress={() => handleGoBack()}>
|
|
541
|
+
<IconAntDesign
|
|
542
|
+
name='arrowleft'
|
|
543
|
+
size={26}
|
|
544
|
+
/>
|
|
545
|
+
</TopActions>
|
|
546
|
+
{showTitle && (
|
|
547
|
+
<OText
|
|
548
|
+
size={16}
|
|
549
|
+
style={{ flex: 1, textAlign: 'center' }}
|
|
550
|
+
weight={Platform.OS === 'ios' ? '600' : 'bold'}
|
|
551
|
+
numberOfLines={2}
|
|
552
|
+
ellipsizeMode='tail'
|
|
553
|
+
>
|
|
554
|
+
{product?.name}
|
|
555
|
+
</OText>
|
|
556
|
+
)}
|
|
557
|
+
</>
|
|
558
|
+
</TopHeader>
|
|
527
559
|
</View>
|
|
528
560
|
{!error && (
|
|
529
561
|
<ScrollView
|
|
530
562
|
ref={scrollViewRef}
|
|
531
563
|
contentContainerStyle={{ paddingBottom: 80 }}
|
|
532
564
|
stickyHeaderIndices={[2]}
|
|
565
|
+
scrollEventThrottle={100}
|
|
533
566
|
onScroll={handleScroll}
|
|
534
567
|
>
|
|
535
568
|
<WrapHeader onLayout={(event: any) => setHeaderRefHeight(event.nativeEvent.layout?.height)}>
|
|
@@ -657,7 +690,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
657
690
|
)}
|
|
658
691
|
</WrapHeader>
|
|
659
692
|
<ProductSummary
|
|
660
|
-
ph={isChewLayout ? 20 :
|
|
693
|
+
ph={isChewLayout ? 20 : 30}
|
|
661
694
|
onLayout={(event: any) => setSummaryRefHeight(event.nativeEvent.layout?.height)}
|
|
662
695
|
>
|
|
663
696
|
<ProductTitle>
|
|
@@ -727,6 +760,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
727
760
|
</ProductDescription>
|
|
728
761
|
<ScrollView
|
|
729
762
|
horizontal
|
|
763
|
+
scrollEventThrottle={100}
|
|
730
764
|
showsHorizontalScrollIndicator={false}
|
|
731
765
|
contentContainerStyle={{ paddingBottom: 30 }}
|
|
732
766
|
>
|
|
@@ -754,12 +788,13 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
754
788
|
{(!loading && product) && (
|
|
755
789
|
<ExtraOptionWrap
|
|
756
790
|
horizontal
|
|
791
|
+
scrollEventThrottle={100}
|
|
757
792
|
showsHorizontalScrollIndicator={false}
|
|
758
793
|
style={{
|
|
759
794
|
marginBottom: 20,
|
|
760
795
|
borderBottomWidth: 1,
|
|
761
796
|
borderBottomColor: theme.colors.border,
|
|
762
|
-
marginHorizontal:
|
|
797
|
+
marginHorizontal: 20,
|
|
763
798
|
backgroundColor: theme.colors.backgroundPage,
|
|
764
799
|
}}
|
|
765
800
|
>
|
|
@@ -833,7 +868,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
833
868
|
</>
|
|
834
869
|
) : (
|
|
835
870
|
<ProductEditions
|
|
836
|
-
style={{ paddingHorizontal: isChewLayout ? 20 :
|
|
871
|
+
style={{ paddingHorizontal: isChewLayout ? 20 : 30 }}
|
|
837
872
|
onLayout={(event: any) => {
|
|
838
873
|
setEditionsLayoutY(event.nativeEvent.layout?.y)
|
|
839
874
|
}}
|
|
@@ -880,12 +915,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
880
915
|
}}>
|
|
881
916
|
{option?.suboptions?.sort((a: any, b: any) => a.rank - b.rank).map(
|
|
882
917
|
(suboption: any) => {
|
|
883
|
-
const currentState =
|
|
884
|
-
productCart.options[
|
|
885
|
-
`id:${option.id}`
|
|
886
|
-
]?.suboptions[
|
|
887
|
-
`id:${suboption.id}`
|
|
888
|
-
] || {};
|
|
918
|
+
const currentState = productCart.options[`id:${option.id}`]?.suboptions[`id:${suboption.id}`] || {};
|
|
889
919
|
const balance =
|
|
890
920
|
productCart.options[
|
|
891
921
|
`id:${option.id}`
|
|
@@ -900,6 +930,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
900
930
|
balance={balance}
|
|
901
931
|
option={option}
|
|
902
932
|
suboption={suboption}
|
|
933
|
+
image={suboption.image}
|
|
903
934
|
state={currentState}
|
|
904
935
|
disabled={
|
|
905
936
|
isSoldOut ||
|
|
@@ -924,7 +955,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
924
955
|
<ProductComment>
|
|
925
956
|
<SectionTitle>
|
|
926
957
|
<OText size={16} weight={'600'} lineHeight={24}>
|
|
927
|
-
{t('
|
|
958
|
+
{t('COMMENTS', 'Special comment')}
|
|
928
959
|
</OText>
|
|
929
960
|
</SectionTitle>
|
|
930
961
|
<OInput
|
|
@@ -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 onPress={() => handleSuboptionClick()}>
|
|
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} style={{
|
|
171
|
+
<OText size={12} lineHeight={18} color={theme.colors.textSecondary} style={{ width: 70, maxWidth: 70 }}>
|
|
143
172
|
+ {parsePrice(price)}
|
|
144
173
|
</OText>
|
|
145
174
|
)}
|
|
@@ -9,30 +9,31 @@ export const Container = styled.TouchableOpacity`
|
|
|
9
9
|
|
|
10
10
|
export const IconControl = styled.TouchableOpacity`
|
|
11
11
|
flex-direction: row;
|
|
12
|
-
padding: 10px;
|
|
13
|
-
width:
|
|
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
|
+
}
|