ordering-ui-react-native 0.16.62 → 0.16.65
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 +1 -1
- package/themes/business/src/components/Chat/index.tsx +9 -1
- package/themes/business/src/components/OrdersOption/index.tsx +3 -2
- package/themes/business/src/types/index.tsx +2 -1
- package/themes/original/src/components/BusinessBasicInformation/index.tsx +5 -5
- package/themes/original/src/components/BusinessProductsList/index.tsx +1 -1
- package/themes/original/src/components/BusinessProductsListing/index.tsx +3 -3
- package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +9 -9
- package/themes/original/src/components/BusinessesListing/index.tsx +4 -3
- package/themes/original/src/components/Cart/index.tsx +7 -7
- package/themes/original/src/components/ProductForm/index.tsx +28 -18
- package/themes/original/src/components/SingleProductCard/index.tsx +6 -13
package/package.json
CHANGED
|
@@ -111,6 +111,13 @@ const ChatUI = (props: MessagesParams) => {
|
|
|
111
111
|
{ key: 'driver_message_4', text: t('DRIVER_MESSAGE_4', 'driver_message_4') }
|
|
112
112
|
]
|
|
113
113
|
|
|
114
|
+
const adminMessageList: any = [
|
|
115
|
+
{ key: 'message_1', text: t('ADMIN_MESSAGE_1', 'admin_message_1') },
|
|
116
|
+
{ key: 'message_2', text: t('ADMIN_MESSAGE_2', 'admin_message_2') },
|
|
117
|
+
{ key: 'message_3', text: t('ADMIN_MESSAGE_3', 'admin_message_3') },
|
|
118
|
+
{ key: 'message_4', text: t('ADMIN_MESSAGE_4', 'admin_message_4') }
|
|
119
|
+
]
|
|
120
|
+
|
|
114
121
|
const handleClickQuickMessage = (text: string) => {
|
|
115
122
|
setMessage && setMessage(`${message}${text}`)
|
|
116
123
|
}
|
|
@@ -426,7 +433,8 @@ const ChatUI = (props: MessagesParams) => {
|
|
|
426
433
|
};
|
|
427
434
|
|
|
428
435
|
useEffect(() => {
|
|
429
|
-
if (user.level ===
|
|
436
|
+
if (user.level === 0) setMessageList(adminMessageList)
|
|
437
|
+
else if (user.level === 2) setMessageList(storeMessageList)
|
|
430
438
|
else if (user.level === 4) setMessageList(driverMessageList)
|
|
431
439
|
else setMessageList([])
|
|
432
440
|
}, [user])
|
|
@@ -88,7 +88,8 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
|
|
|
88
88
|
handleClickLogisticOrder,
|
|
89
89
|
logisticOrders,
|
|
90
90
|
loadLogisticOrders,
|
|
91
|
-
isLogisticActivated
|
|
91
|
+
isLogisticActivated,
|
|
92
|
+
isAlsea
|
|
92
93
|
} = props;
|
|
93
94
|
|
|
94
95
|
const defaultSearchList = {
|
|
@@ -545,7 +546,7 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
|
|
|
545
546
|
</ScrollView>
|
|
546
547
|
</FiltersTab>
|
|
547
548
|
<View style={{ flex: 1, minHeight: HEIGHT_SCREEN - 450 }}>
|
|
548
|
-
{currentTabSelected !== 'logisticOrders' && (
|
|
549
|
+
{currentTabSelected !== 'logisticOrders' && !isAlsea && (
|
|
549
550
|
<View
|
|
550
551
|
style={{
|
|
551
552
|
display: 'flex',
|
|
@@ -293,7 +293,8 @@ export interface OrdersOptionParams {
|
|
|
293
293
|
handleClickLogisticOrder: (status: number, orderId: number) => void,
|
|
294
294
|
logisticOrders: {orders: Array<any>, loading: boolean, error: Array<string> | string},
|
|
295
295
|
loadLogisticOrders: () => void;
|
|
296
|
-
isLogisticActivated?: boolean
|
|
296
|
+
isLogisticActivated?: boolean;
|
|
297
|
+
isAlsea?: boolean;
|
|
297
298
|
}
|
|
298
299
|
export interface ActiveOrdersParams {
|
|
299
300
|
orders?: any;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useState, useEffect } from 'react';
|
|
2
|
-
import { StyleSheet, View, TouchableOpacity, Linking } from 'react-native';
|
|
2
|
+
import { StyleSheet, View, TouchableOpacity, Linking, Pressable } from 'react-native';
|
|
3
3
|
import { useUtils, useOrder, useLanguage, useOrderingTheme } from 'ordering-components/native';
|
|
4
4
|
import { useTheme } from 'styled-components/native';
|
|
5
5
|
import { OIcon, OText, OModal } from '../shared';
|
|
@@ -46,7 +46,7 @@ export const BusinessBasicInformation = (
|
|
|
46
46
|
const [openBusinessReviews, setOpenBusinessReviews] = useState(false);
|
|
47
47
|
const [businessInformationObtained, setBusinessInformationObtained] = useState(false)
|
|
48
48
|
const [businessReviewsObtained, setBusinessReviewsObtainedbtained] = useState(false)
|
|
49
|
-
const isChewLayout = theme?.
|
|
49
|
+
const isChewLayout = orderingTheme?.theme?.business_view?.components?.header?.components?.layout?.type === 'chew'
|
|
50
50
|
const showLogo = !orderingTheme?.theme?.business_view?.components?.header?.components?.business?.components?.logo?.hidden
|
|
51
51
|
|
|
52
52
|
const styles = StyleSheet.create({
|
|
@@ -218,14 +218,14 @@ export const BusinessBasicInformation = (
|
|
|
218
218
|
/>
|
|
219
219
|
)}
|
|
220
220
|
{!!business?.tiktok_profile && (
|
|
221
|
-
<
|
|
221
|
+
<Pressable style={styles.socialIcon} onPress={() => Linking.openURL(business?.tiktok_profile)}>
|
|
222
222
|
<View style={styles.tiktokIcon}>
|
|
223
223
|
<OIcon
|
|
224
224
|
src={theme.images.general.tiktok}
|
|
225
225
|
style={{ width: '100%', height: '100%' }}
|
|
226
226
|
/>
|
|
227
227
|
</View>
|
|
228
|
-
</
|
|
228
|
+
</Pressable>
|
|
229
229
|
)}
|
|
230
230
|
{!!business?.pinterest_profile && (
|
|
231
231
|
<SocialNetWork
|
|
@@ -327,7 +327,7 @@ export const BusinessBasicInformation = (
|
|
|
327
327
|
</Placeholder>
|
|
328
328
|
) : (
|
|
329
329
|
<TitleWrapper>
|
|
330
|
-
<OText size={24} weight={'600'}>
|
|
330
|
+
<OText size={24} weight={'600'} numberOfLines={2}>
|
|
331
331
|
{business?.name}
|
|
332
332
|
</OText>
|
|
333
333
|
{business?.ribbon?.enabled && (
|
|
@@ -129,7 +129,7 @@ const BusinessProductsListUI = (props: BusinessProductsListParams) => {
|
|
|
129
129
|
onProductClick={() => onProductClick(product)}
|
|
130
130
|
productAddedToCartLength={currentCart?.products?.reduce((productsLength: number, Cproduct: any) => { return productsLength + (Cproduct?.id === product?.id ? Cproduct?.quantity : 0) }, 0)}
|
|
131
131
|
handleUpdateProducts={handleUpdateProducts}
|
|
132
|
-
|
|
132
|
+
navigation={navigation}
|
|
133
133
|
/>
|
|
134
134
|
))
|
|
135
135
|
}
|
|
@@ -75,9 +75,9 @@ const BusinessProductsListingUI = (props: BusinessProductsListingParams) => {
|
|
|
75
75
|
const [{ configs }] = useConfig()
|
|
76
76
|
const isPreOrder = configs?.preorder_status_enabled?.value === '1'
|
|
77
77
|
|
|
78
|
-
const isChewLayout = theme?.
|
|
78
|
+
const isChewLayout = orderingTheme?.theme?.business_view?.components?.header?.components?.layout?.type === 'chew'
|
|
79
79
|
const showLogo = !orderingTheme?.theme?.business_view?.components?.header?.components?.business?.components?.logo?.hidden
|
|
80
|
-
const
|
|
80
|
+
const hideBusinessNearCity = orderingTheme?.theme?.business_view?.components?.near_business?.hidden
|
|
81
81
|
|
|
82
82
|
const styles = StyleSheet.create({
|
|
83
83
|
mainContainer: {
|
|
@@ -277,7 +277,7 @@ const BusinessProductsListingUI = (props: BusinessProductsListingParams) => {
|
|
|
277
277
|
</WrapSearchBar>
|
|
278
278
|
)}
|
|
279
279
|
</TopHeader>
|
|
280
|
-
{
|
|
280
|
+
{!hideBusinessNearCity && businessState?.business?.city_id && (
|
|
281
281
|
<NearBusiness>
|
|
282
282
|
<BusinessesListing
|
|
283
283
|
logosLayout
|
|
@@ -80,8 +80,8 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
|
|
|
80
80
|
const appState = useRef(AppState.currentState)
|
|
81
81
|
const searchBarRef = useRef<any>()
|
|
82
82
|
const [appStateVisible, setAppStateVisible] = useState(appState.current);
|
|
83
|
-
const isChewLayout = theme?.
|
|
84
|
-
const
|
|
83
|
+
const isChewLayout = orderingTheme?.theme?.header?.components?.layout?.type === 'chew'
|
|
84
|
+
const hideCities = orderingTheme?.theme?.business_listing_view?.components?.cities?.hidden
|
|
85
85
|
const [refreshing] = useState(false);
|
|
86
86
|
const styles = StyleSheet.create({
|
|
87
87
|
container: {
|
|
@@ -216,6 +216,11 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
|
|
|
216
216
|
}
|
|
217
217
|
}
|
|
218
218
|
|
|
219
|
+
const handleChangeCity = (cityId: number | null) => {
|
|
220
|
+
changeCityFilter(orderState?.options?.city_id === cityId ? null : cityId)
|
|
221
|
+
setIsOpenCities(false)
|
|
222
|
+
}
|
|
223
|
+
|
|
219
224
|
useEffect(() => {
|
|
220
225
|
if (!businessesList?.loading) {
|
|
221
226
|
const fb = businessesList.businesses.filter((b) => b.featured === true && b?.open);
|
|
@@ -345,11 +350,6 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
|
|
|
345
350
|
<OText size={18} weight={700} color={theme.colors?.white}>
|
|
346
351
|
{t('WELCOME', 'Welcome')} {user?.name}!
|
|
347
352
|
</OText>
|
|
348
|
-
<TouchableOpacity
|
|
349
|
-
onPress={() => searchBarRef?.current?.focus?.()}
|
|
350
|
-
>
|
|
351
|
-
<Ionicons name='search' style={{ ...styles.iconStyle, color: theme.colors?.white }} />
|
|
352
|
-
</TouchableOpacity>
|
|
353
353
|
</View>
|
|
354
354
|
)}
|
|
355
355
|
<Search isChewLayout={isChewLayout}>
|
|
@@ -485,7 +485,7 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
|
|
|
485
485
|
/>
|
|
486
486
|
)}
|
|
487
487
|
|
|
488
|
-
{
|
|
488
|
+
{!hideCities && (
|
|
489
489
|
<View style={{ marginTop: 10 }}>
|
|
490
490
|
<OButton
|
|
491
491
|
onClick={() => setIsOpenCities(true)}
|
|
@@ -654,7 +654,7 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
|
|
|
654
654
|
borderBottomColor: orderState?.options?.city_id === city?.id ? theme.colors.primary : theme.colors.backgroundGray,
|
|
655
655
|
marginBottom: 10,
|
|
656
656
|
}}
|
|
657
|
-
onPress={() =>
|
|
657
|
+
onPress={() => handleChangeCity(city?.id)}
|
|
658
658
|
disabled={orderState?.loading}
|
|
659
659
|
>
|
|
660
660
|
<OText color={orderState?.options?.city_id === city?.id ? theme.colors.primary : theme.colors.black}>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
import React, { useState, useEffect } from 'react'
|
|
3
|
-
import { useOrder, useSession, useLanguage } from 'ordering-components/native';
|
|
3
|
+
import { useOrder, useSession, useLanguage, useOrderingTheme } from 'ordering-components/native';
|
|
4
4
|
|
|
5
5
|
import { useTheme } from 'styled-components/native'
|
|
6
6
|
import { BusinessesListing as OriginalBusinessListing } from './Layout/Original'
|
|
@@ -11,7 +11,8 @@ import { ReviewTrigger } from '../ReviewTrigger';
|
|
|
11
11
|
export const BusinessesListing = (props: any) => {
|
|
12
12
|
const { logosLayout } = props
|
|
13
13
|
const theme = useTheme()
|
|
14
|
-
const
|
|
14
|
+
const [orderingTheme] = useOrderingTheme()
|
|
15
|
+
const layout = orderingTheme?.theme?.business_listing_view?.components?.layout?.type || 'original'
|
|
15
16
|
const [, t] = useLanguage();
|
|
16
17
|
const [{ auth }] = useSession()
|
|
17
18
|
const [, { getLastOrderHasNoReview }] = useOrder();
|
|
@@ -96,4 +97,4 @@ export const BusinessesListing = (props: any) => {
|
|
|
96
97
|
)}
|
|
97
98
|
</>
|
|
98
99
|
)
|
|
99
|
-
}
|
|
100
|
+
}
|
|
@@ -60,11 +60,11 @@ const CartUI = (props: any) => {
|
|
|
60
60
|
|
|
61
61
|
const isCartPending = cart?.status === 2
|
|
62
62
|
const isCouponEnabled = validationFields?.fields?.checkout?.coupon?.enabled
|
|
63
|
-
|
|
63
|
+
const isCheckoutMultiBusinessEnabled: Boolean = configs?.checkout_multi_business_enabled?.value === '1'
|
|
64
64
|
|
|
65
65
|
const business: any = (orderState?.carts && Object.values(orderState.carts).find((_cart: any) => _cart?.uuid === props.cartuuid)) ?? {}
|
|
66
66
|
const businessId = business?.business_id ?? null
|
|
67
|
-
const placeSpotTypes = [
|
|
67
|
+
const placeSpotTypes = [4]
|
|
68
68
|
|
|
69
69
|
const momentFormatted = !orderState?.option?.moment
|
|
70
70
|
? t('RIGHT_NOW', 'Right Now')
|
|
@@ -99,10 +99,10 @@ const CartUI = (props: any) => {
|
|
|
99
99
|
setOpenUpselling(false)
|
|
100
100
|
setCanOpenUpselling(false)
|
|
101
101
|
if (isCheckoutMultiBusinessEnabled) {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
102
|
+
props.onNavigationRedirect('CheckoutNavigator', {
|
|
103
|
+
screen: 'MultiCheckout'
|
|
104
|
+
})
|
|
105
|
+
} else {
|
|
106
106
|
props.onNavigationRedirect('CheckoutNavigator', {
|
|
107
107
|
screen: 'CheckoutPage',
|
|
108
108
|
cartUuid: cart?.uuid,
|
|
@@ -446,7 +446,7 @@ const CartUI = (props: any) => {
|
|
|
446
446
|
</OText>
|
|
447
447
|
</View>
|
|
448
448
|
)}
|
|
449
|
-
</>
|
|
449
|
+
</>
|
|
450
450
|
)}
|
|
451
451
|
</BusinessItemAccordion>
|
|
452
452
|
|
|
@@ -169,7 +169,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
169
169
|
const [gallery, setGallery] = useState([])
|
|
170
170
|
const [thumbsSwiper, setThumbsSwiper] = useState(0)
|
|
171
171
|
const [indexGallery, setIndexGallery] = useState(0)
|
|
172
|
-
const [selOpt, setSelectedOpt] = useState(
|
|
172
|
+
const [selOpt, setSelectedOpt] = useState(-1);
|
|
173
173
|
const [isHaveWeight, setIsHaveWeight] = useState(false)
|
|
174
174
|
const [playing, setPlaying] = useState(false);
|
|
175
175
|
const [qtyBy, setQtyBy] = useState({
|
|
@@ -323,6 +323,14 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
323
323
|
</>
|
|
324
324
|
);
|
|
325
325
|
|
|
326
|
+
const handleScroll = ({ nativeEvent: { contentOffset, layoutMeasurement } }: any) => {
|
|
327
|
+
|
|
328
|
+
const _topOption = Object.keys(optionLayout).find(((option: any) => Math.abs(contentOffset?.y - layoutMeasurement?.height - optionLayout[option]?.y) < 20))
|
|
329
|
+
if (_topOption) {
|
|
330
|
+
const _topOptionId = Number(_topOption.replace('id:', ''))
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
|
|
326
334
|
const handleGoBack = navigation?.canGoBack()
|
|
327
335
|
? () => navigation.goBack()
|
|
328
336
|
: () => navigation.navigate('Business', { store: props.businessSlug })
|
|
@@ -408,7 +416,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
408
416
|
height: 44,
|
|
409
417
|
shadowOpacity: 0,
|
|
410
418
|
borderWidth: 1,
|
|
411
|
-
marginTop: isHaveWeight ? 10: 0
|
|
419
|
+
marginTop: isHaveWeight ? 10 : 0
|
|
412
420
|
}}
|
|
413
421
|
/>
|
|
414
422
|
)}
|
|
@@ -457,7 +465,8 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
457
465
|
<ScrollView
|
|
458
466
|
ref={scrollViewRef}
|
|
459
467
|
contentContainerStyle={{ paddingBottom: 80 }}
|
|
460
|
-
stickyHeaderIndices={[2]}
|
|
468
|
+
stickyHeaderIndices={[2]}
|
|
469
|
+
onScroll={handleScroll}>
|
|
461
470
|
<WrapHeader onLayout={(event: any) => setHeaderRefHeight(event.nativeEvent.layout?.height)}>
|
|
462
471
|
{loading && !product ? (
|
|
463
472
|
<View style={styles.productHeaderSkeleton}>
|
|
@@ -681,36 +690,36 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
681
690
|
contentContainerStyle={{ paddingHorizontal: 33, backgroundColor: theme.colors.white }}
|
|
682
691
|
>
|
|
683
692
|
<TouchableOpacity
|
|
684
|
-
key={`
|
|
685
|
-
onPress={() => setSelectedOpt(
|
|
693
|
+
key={`eopt_key_00`}
|
|
694
|
+
onPress={() => setSelectedOpt(-1)}
|
|
686
695
|
style={[
|
|
687
696
|
styles.extraItem,
|
|
688
697
|
{
|
|
689
|
-
borderBottomColor: selOpt ==
|
|
698
|
+
borderBottomColor: selOpt == -1 ? theme.colors.textNormal : theme.colors.border,
|
|
690
699
|
},
|
|
691
700
|
]}>
|
|
692
701
|
<OText
|
|
693
|
-
color={selOpt ==
|
|
694
|
-
size={selOpt ==
|
|
695
|
-
weight={selOpt ==
|
|
702
|
+
color={selOpt == -1 ? theme.colors.textNormal : theme.colors.textSecondary}
|
|
703
|
+
size={selOpt == -1 ? 14 : 12}
|
|
704
|
+
weight={selOpt == -1 ? '600' : 'normal'}>
|
|
696
705
|
{t('ALL', 'All')}
|
|
697
706
|
</OText>
|
|
698
707
|
</TouchableOpacity>
|
|
699
708
|
{product?.ingredients.length > 0 && (
|
|
700
709
|
<TouchableOpacity
|
|
701
|
-
key={`
|
|
702
|
-
onPress={() => setSelectedOpt(
|
|
710
|
+
key={`eopt_key_01`}
|
|
711
|
+
onPress={() => setSelectedOpt(0)}
|
|
703
712
|
style={[
|
|
704
713
|
styles.extraItem,
|
|
705
714
|
{
|
|
706
715
|
borderBottomColor:
|
|
707
|
-
selOpt ==
|
|
716
|
+
selOpt == 0 ? theme.colors.textNormal : theme.colors.border,
|
|
708
717
|
},
|
|
709
718
|
]}>
|
|
710
719
|
<OText
|
|
711
|
-
color={selOpt ==
|
|
712
|
-
size={selOpt ==
|
|
713
|
-
weight={selOpt ==
|
|
720
|
+
color={selOpt == 0 ? theme.colors.textNormal : theme.colors.textSecondary}
|
|
721
|
+
size={selOpt == 0 ? 14 : 12}
|
|
722
|
+
weight={selOpt == 0 ? '600' : 'normal'}>
|
|
714
723
|
{t('INGREDIENTS', 'Ingredients')}
|
|
715
724
|
</OText>
|
|
716
725
|
</TouchableOpacity>
|
|
@@ -760,10 +769,10 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
760
769
|
</>
|
|
761
770
|
) : (
|
|
762
771
|
<ProductEditions>
|
|
763
|
-
{selOpt
|
|
772
|
+
{selOpt === -1 ? (
|
|
764
773
|
<>
|
|
765
774
|
{product?.ingredients.length > 0 && (
|
|
766
|
-
<View style={styles.optionContainer}>
|
|
775
|
+
<View style={styles.optionContainer} onLayout={(event: any) => handleOnLayout(event, 0)}>
|
|
767
776
|
<SectionTitle>
|
|
768
777
|
<OText size={16}>
|
|
769
778
|
{t('INGREDIENTS', 'Ingredients')}
|
|
@@ -845,7 +854,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
845
854
|
</>
|
|
846
855
|
) : (
|
|
847
856
|
<>
|
|
848
|
-
{selOpt
|
|
857
|
+
{selOpt === 0 ? (
|
|
849
858
|
<View style={styles.optionContainer}>
|
|
850
859
|
<SectionTitle>
|
|
851
860
|
<OText size={16}>
|
|
@@ -1084,6 +1093,7 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
1084
1093
|
export const ProductForm = (props: any) => {
|
|
1085
1094
|
const productOptionsProps = {
|
|
1086
1095
|
...props,
|
|
1096
|
+
productCart: { quantity: props?.product?.minimum_per_order || 1 },
|
|
1087
1097
|
UIComponent: ProductOptionsUI,
|
|
1088
1098
|
};
|
|
1089
1099
|
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
useOrder,
|
|
6
6
|
useUtils,
|
|
7
7
|
useSession,
|
|
8
|
+
useOrderingTheme,
|
|
8
9
|
SingleProductCard as SingleProductCardController
|
|
9
10
|
} from 'ordering-components/native';
|
|
10
11
|
import { useTheme } from 'styled-components/native';
|
|
@@ -39,7 +40,8 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
|
|
|
39
40
|
} = props;
|
|
40
41
|
|
|
41
42
|
const theme = useTheme();
|
|
42
|
-
const
|
|
43
|
+
const [orderingTheme] = useOrderingTheme()
|
|
44
|
+
const hideAddButton = orderingTheme?.theme?.business_view?.components?.products?.components?.add_to_cart_button?.hidden
|
|
43
45
|
|
|
44
46
|
const styles = StyleSheet.create({
|
|
45
47
|
container: {
|
|
@@ -132,7 +134,7 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
|
|
|
132
134
|
<InView style={{ minHeight: 200 }} triggerOnce={true} onChange={(inView: boolean) => setIsIntersectionObserver(true)}>
|
|
133
135
|
{isIntersectionObserver ? (
|
|
134
136
|
<CardContainer
|
|
135
|
-
showAddButton={
|
|
137
|
+
showAddButton={!hideAddButton}
|
|
136
138
|
style={[
|
|
137
139
|
styles.container,
|
|
138
140
|
(isSoldOut || maxProductQuantity <= 0) && styles.soldOutBackgroundStyle,
|
|
@@ -202,7 +204,7 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
|
|
|
202
204
|
</OText>
|
|
203
205
|
</RibbonBox>
|
|
204
206
|
)}
|
|
205
|
-
{product?.images
|
|
207
|
+
{product?.images && (
|
|
206
208
|
<FastImage
|
|
207
209
|
style={styles.productStyle}
|
|
208
210
|
source={{
|
|
@@ -211,15 +213,6 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
|
|
|
211
213
|
}}
|
|
212
214
|
resizeMode={FastImage.resizeMode.cover}
|
|
213
215
|
/>
|
|
214
|
-
) : (
|
|
215
|
-
<FastImage
|
|
216
|
-
style={styles.productStyle}
|
|
217
|
-
source={{
|
|
218
|
-
uri: Image.resolveAssetSource(theme.images.dummies.product).uri,
|
|
219
|
-
priority: FastImage.priority.normal,
|
|
220
|
-
}}
|
|
221
|
-
resizeMode={FastImage.resizeMode.cover}
|
|
222
|
-
/>
|
|
223
216
|
)}
|
|
224
217
|
</LogoWrapper>
|
|
225
218
|
|
|
@@ -231,7 +224,7 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
|
|
|
231
224
|
</SoldOut>
|
|
232
225
|
)}
|
|
233
226
|
</View>
|
|
234
|
-
{
|
|
227
|
+
{!hideAddButton && (
|
|
235
228
|
<OButton
|
|
236
229
|
onClick={() => onProductClick?.(product)}
|
|
237
230
|
style={{
|