ordering-ui-react-native 0.17.99-release → 0.18.0-release

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/package.json +1 -1
  2. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +7 -6
  3. package/themes/original/src/components/AddressForm/index.tsx +2 -2
  4. package/themes/original/src/components/AddressForm/styles.tsx +1 -1
  5. package/themes/original/src/components/AddressList/styles.tsx +4 -4
  6. package/themes/original/src/components/BusinessBasicInformation/index.tsx +2 -2
  7. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +1 -1
  8. package/themes/original/src/components/BusinessInformation/styles.tsx +2 -2
  9. package/themes/original/src/components/BusinessItemAccordion/index.tsx +4 -3
  10. package/themes/original/src/components/BusinessListingSearch/index.tsx +4 -5
  11. package/themes/original/src/components/BusinessListingSearch/styles.tsx +1 -1
  12. package/themes/original/src/components/BusinessProductsCategories/index.tsx +1 -1
  13. package/themes/original/src/components/BusinessProductsListing/index.tsx +31 -12
  14. package/themes/original/src/components/BusinessProductsListing/styles.tsx +2 -2
  15. package/themes/original/src/components/BusinessReviews/index.tsx +1 -1
  16. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  17. package/themes/original/src/components/BusinessesListing/Layout/Appointment/styles.tsx +5 -5
  18. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListFooter.tsx +1 -1
  19. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListHeader.tsx +7 -7
  20. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
  21. package/themes/original/src/components/CartStoresListing/styles.tsx +2 -2
  22. package/themes/original/src/components/Checkout/index.tsx +1 -1
  23. package/themes/original/src/components/Checkout/styles.tsx +17 -0
  24. package/themes/original/src/components/CitiesControl/styles.tsx +1 -1
  25. package/themes/original/src/components/Favorite/index.tsx +3 -4
  26. package/themes/original/src/components/Favorite/styles.tsx +0 -2
  27. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  28. package/themes/original/src/components/GPSButton/index.tsx +1 -1
  29. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +1 -1
  30. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +1 -1
  31. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +1 -1
  32. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
  33. package/themes/original/src/components/HighestRatedBusinesses/styles.tsx +1 -1
  34. package/themes/original/src/components/Home/index.tsx +1 -1
  35. package/themes/original/src/components/Messages/styles.tsx +1 -1
  36. package/themes/original/src/components/MultiCart/index.tsx +1 -1
  37. package/themes/original/src/components/MultiCheckout/index.tsx +4 -4
  38. package/themes/original/src/components/MultiOrdersDetails/index.tsx +1 -1
  39. package/themes/original/src/components/MyOrders/index.tsx +5 -5
  40. package/themes/original/src/components/NetworkError/styles.tsx +2 -2
  41. package/themes/original/src/components/Notifications/index.tsx +2 -4
  42. package/themes/original/src/components/Notifications/styles.tsx +0 -1
  43. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +1 -1
  44. package/themes/original/src/components/OrderDetails/index.tsx +702 -663
  45. package/themes/original/src/components/OrderDetails/styles.tsx +24 -7
  46. package/themes/original/src/components/OrderProgress/styles.tsx +1 -1
  47. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/styles.tsx +1 -1
  48. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/styles.tsx +1 -1
  49. package/themes/original/src/components/OrdersOption/index.tsx +1 -1
  50. package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
  51. package/themes/original/src/components/ProductForm/ExtraOptions.tsx +56 -0
  52. package/themes/original/src/components/ProductForm/index.tsx +51 -146
  53. package/themes/original/src/components/ProductItemAccordion/index.tsx +5 -0
  54. package/themes/original/src/components/ProductOptionSubOption/index.tsx +1 -1
  55. package/themes/original/src/components/ProfessionalProfile/styles.tsx +3 -3
  56. package/themes/original/src/components/Promotions/index.tsx +4 -4
  57. package/themes/original/src/components/Promotions/styles.tsx +0 -2
  58. package/themes/original/src/components/ReviewDriver/styles.tsx +1 -1
  59. package/themes/original/src/components/ReviewOrder/styles.tsx +1 -1
  60. package/themes/original/src/components/ReviewProducts/styles.tsx +1 -1
  61. package/themes/original/src/components/ServiceForm/index.tsx +1 -1
  62. package/themes/original/src/components/ServiceForm/styles.tsx +4 -4
  63. package/themes/original/src/components/StripeElementsForm/index.tsx +1 -1
  64. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +170 -0
  65. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +86 -0
  66. package/themes/original/src/components/UpsellingProducts/index.tsx +15 -199
  67. package/themes/original/src/components/UpsellingProducts/styles.tsx +19 -0
  68. package/themes/original/src/components/UserFormDetails/index.tsx +16 -3
  69. package/themes/original/src/components/UserProfile/index.tsx +1 -1
  70. package/themes/original/src/components/WalletTransactions/styles.tsx +1 -0
  71. package/themes/original/src/components/Wallets/index.tsx +1 -3
  72. package/themes/original/src/components/Wallets/styles.tsx +1 -0
  73. package/themes/original/src/components/shared/HeaderTitle.tsx +1 -1
  74. package/themes/original/src/components/shared/OModal.tsx +12 -14
  75. package/themes/original/src/layouts/Container.tsx +1 -1
@@ -0,0 +1,170 @@
1
+ import React, { useState } from 'react'
2
+ import { Platform, StyleSheet, View } from 'react-native'
3
+ import {
4
+ useLanguage,
5
+ useOrder,
6
+ useConfig
7
+ } from 'ordering-components/native'
8
+ import { useTheme } from 'styled-components/native';
9
+ import { OText, OButton } from '../shared'
10
+ import {
11
+ CartList,
12
+ CartDivider,
13
+ TopActionsHeader,
14
+ TopHeader
15
+ } from './styles'
16
+ import { OrderSummary } from '../OrderSummary';
17
+ import { Cart } from '../Cart';
18
+ import { ScrollView } from 'react-native-gesture-handler';
19
+ import IconAntDesign from 'react-native-vector-icons/AntDesign';
20
+ import { useSafeAreaInsets } from 'react-native-safe-area-context';
21
+ import { UpsellingLayout } from './UpsellingLayout';
22
+
23
+ export const UpsellingContent = (props : any) => {
24
+ const {
25
+ onGoBack,
26
+ handleUpsellingPage,
27
+ onNavigationRedirect,
28
+ cart,
29
+ productsList
30
+ } = props
31
+
32
+ const theme = useTheme();
33
+
34
+ const [{ carts }] = useOrder()
35
+ const [{ configs }] = useConfig()
36
+ const [, t] = useLanguage()
37
+ const { bottom } = useSafeAreaInsets()
38
+ const [isCartsLoading, setIsCartsLoading] = useState(false)
39
+ const [showTitle, setShowTitle] = useState(false)
40
+
41
+ const isMultiCheckout = configs?.checkout_multi_business_enabled?.value === '1'
42
+ const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
43
+ const showCartList = isChewLayout
44
+ const commentDelayTime = isChewLayout ? 500 : null
45
+
46
+ const cartList = (carts && Object.values(carts).filter((_cart: any) => _cart?.products?.length > 0 && _cart.uuid !== cart?.uuid)) || []
47
+
48
+ const styles = StyleSheet.create({
49
+ closeUpsellingButton: {
50
+ borderRadius: 7.6,
51
+ borderColor: theme.colors.primary,
52
+ backgroundColor: theme.colors.primary,
53
+ borderWidth: 1,
54
+ alignSelf: 'center',
55
+ height: 44,
56
+ shadowOpacity: 0,
57
+ width: '80%',
58
+ },
59
+ cancelBtn: {
60
+ paddingHorizontal: 18,
61
+ borderWidth: 1,
62
+ borderRadius: 7.6,
63
+ borderColor: theme.colors.textSecondary,
64
+ height: 38
65
+ },
66
+ headerItem: {
67
+ flexDirection: 'row',
68
+ alignItems: 'center',
69
+ marginVertical: 2,
70
+ marginHorizontal: 20,
71
+ },
72
+ btnBackArrow: {
73
+ borderWidth: 0,
74
+ width: 26,
75
+ height: 26,
76
+ backgroundColor: theme.colors.clear,
77
+ borderColor: theme.colors.clear,
78
+ shadowColor: theme.colors.clear,
79
+ paddingLeft: 0,
80
+ paddingRight: 0,
81
+ marginLeft: 20,
82
+ marginBottom: 10
83
+ },
84
+ wrapperNavbar: {
85
+ paddingHorizontal: 20,
86
+ paddingTop: 0,
87
+ }
88
+ })
89
+
90
+
91
+ const handleScroll = ({ nativeEvent: { contentOffset } }: any) => {
92
+ setShowTitle(contentOffset.y > 30)
93
+ }
94
+
95
+ return (
96
+ <>
97
+ <View style={styles.wrapperNavbar}>
98
+ <TopHeader>
99
+ <>
100
+ <TopActionsHeader onPress={() => onGoBack()}>
101
+ <IconAntDesign
102
+ name='arrowleft'
103
+ size={26}
104
+ />
105
+ </TopActionsHeader>
106
+ {showTitle && (
107
+ <OText
108
+ size={16}
109
+ style={{ flex: 1, textAlign: 'center', right: 15 }}
110
+ weight={Platform.OS === 'ios' ? '600' : 'bold'}
111
+ numberOfLines={2}
112
+ ellipsizeMode='tail'
113
+ >
114
+ {t('WANT_SOMETHING_ELSE', 'Do you want something else?')}
115
+ </OText>
116
+ )}
117
+ </>
118
+ </TopHeader>
119
+ </View>
120
+ <ScrollView style={{ marginTop: 10, marginBottom: props.isPage ? 40 : bottom + (Platform.OS == 'ios' ? 96 : 130) }} showsVerticalScrollIndicator={false} onScroll={handleScroll}>
121
+ {productsList.length > 0 &&
122
+ <View style={{ paddingHorizontal: 40, overflow: 'visible' }}>
123
+ <OText size={16} lineHeight={24} weight={'500'}>{t('WANT_SOMETHING_ELSE', 'Do you want something else?')}</OText>
124
+ <UpsellingLayout {...props} />
125
+ </View>
126
+ }
127
+ <View style={{ paddingHorizontal: 40 }}>
128
+ <OText size={20} lineHeight={30} weight={600} style={{ marginTop: 10, marginBottom: 17 }}>{t('YOUR_CART', 'Your cart')}</OText>
129
+ <OrderSummary
130
+ cart={cart}
131
+ commentDelayTime={commentDelayTime}
132
+ isCartPending={cart?.status === 2}
133
+ onNavigationRedirect={onNavigationRedirect}
134
+ />
135
+ </View>
136
+ {showCartList && cartList.map((cart: any, i: number) => (
137
+ <CartList key={i}>
138
+ <Cart
139
+ isFromUpselling
140
+ cart={cart}
141
+ cartuuid={cart.uuid}
142
+ hideUpselling
143
+ singleBusiness={props.singleBusiness}
144
+ isFranchiseApp={props.isFranchiseApp}
145
+ isCartsLoading={isCartsLoading}
146
+ setIsCartsLoading={setIsCartsLoading}
147
+ isMultiCheckout={isMultiCheckout}
148
+ onNavigationRedirect={props.onNavigationRedirect}
149
+ />
150
+ <CartDivider />
151
+ </CartList>
152
+ ))}
153
+ </ScrollView>
154
+ <View
155
+ style={{
156
+ alignItems: 'center',
157
+ bottom: props.isPage ? Platform.OS === 'ios' ? 0 : 20 : Platform.OS === 'ios' ? bottom + 59 : bottom + 125
158
+ }}
159
+ >
160
+ <OButton
161
+ imgRightSrc=''
162
+ text={t('CHECKOUT', 'Checkout')}
163
+ style={{ ...styles.closeUpsellingButton }}
164
+ textStyle={{ color: theme.colors.white, fontSize: 14 }}
165
+ onClick={() => handleUpsellingPage(cart)}
166
+ />
167
+ </View>
168
+ </>
169
+ )
170
+ }
@@ -0,0 +1,86 @@
1
+ import React from 'react'
2
+ import { Platform, StyleSheet, View } from 'react-native'
3
+ import {
4
+ useUtils,
5
+ useLanguage
6
+ } from 'ordering-components/native'
7
+ import {
8
+ Container,
9
+ UpsellingContainer,
10
+ Item,
11
+ Details,
12
+ AddButton,
13
+ } from './styles'
14
+ import { OIcon, OText } from '../shared'
15
+ import { useTheme } from 'styled-components/native';
16
+
17
+ export const UpsellingLayout = (props : any) => {
18
+ const {
19
+ upsellingProducts,
20
+ productsList,
21
+ onNavigationRedirect,
22
+ business
23
+ } = props
24
+ const theme = useTheme()
25
+ const [{ parsePrice }] = useUtils()
26
+ const [, t] = useLanguage()
27
+
28
+ const styles = StyleSheet.create({
29
+ imageStyle: {
30
+ width: 73,
31
+ height: 73,
32
+ resizeMode: 'cover',
33
+ borderRadius: 7.6,
34
+ },
35
+ })
36
+
37
+ const handleFormProduct = (product: any) => {
38
+ onNavigationRedirect && onNavigationRedirect('ProductDetails', {
39
+ product: product,
40
+ businessId: product?.api?.businessId,
41
+ businessSlug: business.slug,
42
+ })
43
+ }
44
+
45
+
46
+ return (
47
+ <>
48
+ <Container>
49
+ <UpsellingContainer
50
+ horizontal
51
+ showsHorizontalScrollIndicator={false}
52
+ contentContainerStyle={{ paddingHorizontal: Platform.OS === 'ios' ? 40 : 0 }}
53
+ >
54
+ {
55
+ !upsellingProducts.loading && (
56
+ <>
57
+ {
58
+ !upsellingProducts.error ? productsList.map((product: any, i: number) => (
59
+ <Item key={`${product.id}_${i}`}>
60
+ <View style={{ flexBasis: '57%' }}>
61
+ <Details>
62
+ <OText size={12} lineHeight={18} numberOfLines={1} ellipsizeMode='tail'>{product.name}</OText>
63
+ <OText size={12} lineHeight={18} color={theme.colors.textNormal}>{parsePrice(product.price)}</OText>
64
+ </Details>
65
+ <AddButton onPress={() => handleFormProduct(product)}>
66
+ <OText size={10} color={theme.colors.primary}>{t('ADD', 'Add')}</OText>
67
+ </AddButton>
68
+ </View>
69
+ <View>
70
+ <OIcon url={product?.images || theme?.images?.dummies?.product} style={styles.imageStyle} />
71
+ </View>
72
+ </Item>
73
+ )) : (
74
+ <OText>
75
+ {upsellingProducts.message}
76
+ </OText>
77
+ )
78
+ }
79
+ </>
80
+ )
81
+ }
82
+ </UpsellingContainer>
83
+ </Container>
84
+ </>
85
+ )
86
+ }
@@ -1,116 +1,41 @@
1
- import React, { useState, useEffect } from 'react'
2
- import { Platform, StyleSheet, TouchableOpacity, View } from 'react-native'
1
+ import React, { useEffect } from 'react'
3
2
  import {
4
3
  UpsellingPage as UpsellingPageController,
5
- useUtils,
6
- useLanguage,
7
4
  useOrder,
8
- useConfig
9
5
  } from 'ordering-components/native'
10
- import { useTheme } from 'styled-components/native';
11
- import { OText, OIcon, OBottomPopup, OButton } from '../shared'
6
+ import { OBottomPopup } from '../shared'
12
7
  import { UpsellingProductsParams } from '../../types'
13
- import {
14
- Container,
15
- UpsellingContainer,
16
- Item,
17
- Details,
18
- AddButton,
19
- CartList,
20
- CartDivider
21
- } from './styles'
22
- import { OrderSummary } from '../OrderSummary';
23
- import { Cart } from '../Cart';
24
- import { ScrollView } from 'react-native-gesture-handler';
25
- import { useSafeAreaInsets } from 'react-native-safe-area-context';
8
+
9
+ import { UpsellingLayout } from './UpsellingLayout';
10
+ import { UpsellingContent } from './UpsellingContent';
26
11
 
27
12
  const UpsellingProductsUI = (props: UpsellingProductsParams) => {
28
13
  const {
29
14
  isCustomMode,
30
15
  upsellingProducts,
31
- business,
32
16
  handleUpsellingPage,
33
17
  openUpselling,
34
18
  canOpenUpselling,
35
19
  setCanOpenUpselling,
36
- isFromCart,
37
- onNavigationRedirect,
38
- onGoBack
20
+ isFromCart
39
21
  } = props
40
22
 
41
- const theme = useTheme();
42
-
43
- const styles = StyleSheet.create({
44
- imageStyle: {
45
- width: 73,
46
- height: 73,
47
- resizeMode: 'cover',
48
- borderRadius: 7.6,
49
- },
50
- closeUpsellingButton: {
51
- borderRadius: 7.6,
52
- borderColor: theme.colors.primary,
53
- backgroundColor: theme.colors.primary,
54
- borderWidth: 1,
55
- alignSelf: 'center',
56
- height: 44,
57
- shadowOpacity: 0,
58
- width: '80%',
59
- },
60
- cancelBtn: {
61
- paddingHorizontal: 18,
62
- borderWidth: 1,
63
- borderRadius: 7.6,
64
- borderColor: theme.colors.textSecondary,
65
- height: 38
66
- },
67
- headerItem: {
68
- flexDirection: 'row',
69
- alignItems: 'center',
70
- marginVertical: 2,
71
- marginHorizontal: 20,
72
- },
73
- btnBackArrow: {
74
- borderWidth: 0,
75
- width: 26,
76
- height: 26,
77
- backgroundColor: theme.colors.clear,
78
- borderColor: theme.colors.clear,
79
- shadowColor: theme.colors.clear,
80
- paddingLeft: 0,
81
- paddingRight: 0,
82
- marginLeft: 20,
83
- marginBottom: 10
84
- },
85
- })
86
-
87
23
  const [{ carts }] = useOrder()
88
- const [{ parsePrice }] = useUtils()
89
- const [{ configs }] = useConfig()
90
- const [, t] = useLanguage()
91
- const { bottom } = useSafeAreaInsets()
92
- const [isCartsLoading, setIsCartsLoading] = useState(false)
93
-
94
- const isMultiCheckout = configs?.checkout_multi_business_enabled?.value === '1'
95
- const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
96
- const showCartList = isChewLayout
97
- const commentDelayTime = isChewLayout ? 500 : null
98
24
 
99
25
  const cart = carts?.[`businessId:${props.businessId}`] ?? {}
100
- const cartList = (carts && Object.values(carts).filter((_cart: any) => _cart?.products?.length > 0 && _cart.uuid !== cart?.uuid)) || []
101
26
  const cartProducts = cart?.products?.length
102
- ? cart?.products.map((product: any) => product.id)
103
- : []
27
+ ? cart?.products.map((product: any) => product.id)
28
+ : []
104
29
 
105
30
  const productsList = !upsellingProducts.loading && !upsellingProducts.error
106
- ? upsellingProducts?.products?.length
31
+ ? upsellingProducts?.products?.length
107
32
  ? upsellingProducts?.products.filter((product: any) => !cartProducts.includes(product.id))
108
33
  : (props?.products ?? []).filter((product: any) => !cartProducts.includes(product.id)) ?? []
109
- : []
34
+ : []
110
35
 
111
36
  useEffect(() => {
112
37
  if (!isCustomMode && !props.products) {
113
- if (!upsellingProducts.loading) {
38
+ if (!upsellingProducts?.loading) {
114
39
  if (upsellingProducts?.products?.length && !isFromCart) {
115
40
  setCanOpenUpselling && setCanOpenUpselling(true)
116
41
  } else {
@@ -118,125 +43,16 @@ const UpsellingProductsUI = (props: UpsellingProductsParams) => {
118
43
  }
119
44
  }
120
45
  }
121
- }, [upsellingProducts.loading, upsellingProducts?.products.length])
122
-
123
- const handleFormProduct = (product: any) => {
124
- onNavigationRedirect && onNavigationRedirect('ProductDetails', {
125
- product: product,
126
- businessId: product?.api?.businessId,
127
- businessSlug: business.slug,
128
- })
129
- }
130
-
131
- const UpsellingLayout = () => {
132
- return (
133
- <Container>
134
- <UpsellingContainer
135
- horizontal
136
- showsHorizontalScrollIndicator={false}
137
- contentContainerStyle={{ paddingHorizontal: Platform.OS === 'ios' ? 40 : 0 }}
138
- >
139
- {
140
- !upsellingProducts.loading && (
141
- <>
142
- {
143
- !upsellingProducts.error ? productsList.map((product: any, i: number) => (
144
- <Item key={`${product.id}_${i}`}>
145
- <View style={{ flexBasis: '57%' }}>
146
- <Details>
147
- <OText size={12} lineHeight={18} numberOfLines={1} ellipsizeMode='tail'>{product.name}</OText>
148
- <OText size={12} lineHeight={18} color={theme.colors.textNormal}>{parsePrice(product.price)}</OText>
149
- </Details>
150
- <AddButton onPress={() => handleFormProduct(product)}>
151
- <OText size={10} color={theme.colors.primary}>{t('ADD', 'Add')}</OText>
152
- </AddButton>
153
- </View>
154
- <View>
155
- <OIcon url={product?.images || theme?.images?.dummies?.product} style={styles.imageStyle} />
156
- </View>
157
- </Item>
158
- )) : (
159
- <OText>
160
- {upsellingProducts.message}
161
- </OText>
162
- )
163
- }
164
- </>
165
- )
166
- }
167
- </UpsellingContainer>
168
- </Container>
169
- )
170
- }
171
-
172
- const UpsellingContent = () => {
173
- return (
174
- <>
175
- <View style={{ ...styles.headerItem, flex: 1, marginTop: Platform.OS == 'ios' ? 35 : 14 }}>
176
- <TouchableOpacity onPress={() => onGoBack()} style={styles.btnBackArrow}>
177
- <OIcon src={theme.images.general.arrow_left} color={theme.colors.textNormal} />
178
- </TouchableOpacity>
179
- </View>
180
- <ScrollView style={{ marginTop: 10, marginBottom: props.isPage ? 40 : bottom + (Platform.OS == 'ios' ? 96 : 130) }} showsVerticalScrollIndicator={false}>
181
- {productsList.length > 0 &&
182
- <View style={{ paddingHorizontal: 40, overflow: 'visible' }}>
183
- <OText size={16} lineHeight={24} weight={'500'}>{t('WANT_SOMETHING_ELSE', 'Do you want something else?')}</OText>
184
- <UpsellingLayout />
185
- </View>
186
- }
187
- <View style={{ paddingHorizontal: 40 }}>
188
- <OText size={20} lineHeight={30} weight={600} style={{ marginTop: 10, marginBottom: 17 }}>{t('YOUR_CART', 'Your cart')}</OText>
189
- <OrderSummary
190
- cart={cart}
191
- commentDelayTime={commentDelayTime}
192
- isCartPending={cart?.status === 2}
193
- onNavigationRedirect={onNavigationRedirect}
194
- />
195
- </View>
196
- {showCartList && cartList.map((cart: any, i: number) => (
197
- <CartList key={i}>
198
- <Cart
199
- isFromUpselling
200
- cart={cart}
201
- cartuuid={cart.uuid}
202
- hideUpselling
203
- singleBusiness={props.singleBusiness}
204
- isFranchiseApp={props.isFranchiseApp}
205
- isCartsLoading={isCartsLoading}
206
- setIsCartsLoading={setIsCartsLoading}
207
- isMultiCheckout={isMultiCheckout}
208
- onNavigationRedirect={props.onNavigationRedirect}
209
- />
210
- <CartDivider />
211
- </CartList>
212
- ))}
213
- </ScrollView>
214
- <View
215
- style={{
216
- alignItems: 'center',
217
- bottom: props.isPage ? Platform.OS === 'ios' ? 0 : 20 : Platform.OS === 'ios' ? bottom + 59 : bottom + 125
218
- }}
219
- >
220
- <OButton
221
- imgRightSrc=''
222
- text={t('CHECKOUT', 'Checkout')}
223
- style={{ ...styles.closeUpsellingButton }}
224
- textStyle={{ color: theme.colors.white, fontSize: 14 }}
225
- onClick={() => handleUpsellingPage(cart)}
226
- />
227
- </View>
228
- </>
229
- )
230
- }
46
+ }, [upsellingProducts?.loading, upsellingProducts?.products?.length])
231
47
 
232
48
  return (
233
49
  <>
234
50
  {isCustomMode ? (
235
- <UpsellingLayout />
51
+ <UpsellingLayout {...props} productsList={productsList} />
236
52
  ) : (
237
53
  <>
238
54
  {props.isPage ? (
239
- <UpsellingContent />
55
+ <UpsellingContent {...props} cart={cart} productsList={productsList} />
240
56
  ) : (
241
57
  canOpenUpselling && (
242
58
  <OBottomPopup
@@ -245,7 +61,7 @@ const UpsellingProductsUI = (props: UpsellingProductsParams) => {
245
61
  onClose={() => handleUpsellingPage(cart)}
246
62
  isStatusBar
247
63
  >
248
- <UpsellingContent />
64
+ <UpsellingContent {...props} productsList={productsList} />
249
65
  </OBottomPopup>
250
66
  )
251
67
  )}
@@ -59,3 +59,22 @@ export const CartDivider = styled.View`
59
59
  background-color: ${(props: any) => props.theme.colors.backgroundGray100};
60
60
  margin: 20px -40px 0;
61
61
  `
62
+
63
+
64
+ export const TopActionsHeader = styled.TouchableOpacity`
65
+ height: 60px;
66
+ justify-content: center;
67
+ min-width: 30px;
68
+ padding-right: 15px;
69
+ `;
70
+
71
+ export const TopHeader = styled.View`
72
+ width: 100%;
73
+ flex-direction: row;
74
+ align-items: center;
75
+ justify-content: space-between;
76
+ z-index: 1;
77
+ height: 60px;
78
+ min-height: 60px;
79
+ `
80
+
@@ -502,12 +502,25 @@ export const UserFormDetailsUI = (props: any) => {
502
502
  ? t('SIGN_UP_AND_PLACE_ORDER', 'Sign up and place order')
503
503
  : t('CONTINUE', 'Continue'))
504
504
  }
505
- bgColor={theme.colors.white}
506
- textStyle={{ color: theme.colors.primary, fontSize: 14 }}
505
+ bgColor={theme.colors.primary}
506
+ textStyle={{
507
+ color: !user?.guest_id && (formState.loading || !isValid) ? theme.colors.primary : theme.colors.white,
508
+ fontSize: 14
509
+ }}
507
510
  borderColor={theme.colors.primary}
508
511
  isDisabled={!user?.guest_id && (formState.loading || !isValid)}
509
512
  imgRightSrc={null}
510
- style={{ borderRadius: 7.6, shadowOpacity: 0, width: '100%', borderWidth: 1, marginTop: 20, marginBottom: 20 }}
513
+ style={{
514
+ borderRadius: 7.6,
515
+ shadowOpacity: 0,
516
+ width: '100%',
517
+ borderWidth: 1,
518
+ marginTop: 20,
519
+ marginBottom: 20,
520
+ backgroundColor: !user?.guest_id && (formState.loading || !isValid) ? theme.colors.lightGray : theme.colors.primary,
521
+ borderColor: !user?.guest_id && (formState.loading || !isValid) ? theme.colors.white : theme.colors.primary,
522
+ opacity: !user?.guest_id && (formState.loading || !isValid) ? 0.3 : 1,
523
+ }}
511
524
  onClick={!user?.guest_id ? handleSubmit(onSubmit) : () => setIsModalOpen(true)}
512
525
  />
513
526
  )}
@@ -101,7 +101,7 @@ const ProfileListUI = (props: ProfileParams) => {
101
101
  marginEnd: 14
102
102
  },
103
103
  pagePadding: {
104
- paddingHorizontal: isChewLayout ? 20 : 40
104
+ paddingHorizontal: 20
105
105
  },
106
106
  messageIconStyle: {
107
107
  fontSize: 18,
@@ -3,6 +3,7 @@ import styled from 'styled-components/native'
3
3
  export const Container = styled.View`
4
4
  display: flex;
5
5
  flex-direction: column;
6
+ width: 100%;
6
7
  `
7
8
 
8
9
  export const TransactionsWrapper = styled.View`
@@ -120,9 +120,7 @@ const WalletsUI = (props: any) => {
120
120
 
121
121
  return (
122
122
  <>
123
- <Container
124
- pdng={Platform.OS === 'ios' ? '10px' : '0'}
125
- >
123
+ <Container>
126
124
  <Header>
127
125
  <View style={{
128
126
  ...{
@@ -1,6 +1,7 @@
1
1
  import styled from 'styled-components/native'
2
2
 
3
3
  export const Container = styled.View`
4
+ padding-horizontal: 20px;
4
5
  padding-bottom: 20px;
5
6
  padding-top: ${(props: any) => props.pdng};
6
7
  `
@@ -13,7 +13,7 @@ const HeaderTitle = (props: any) => {
13
13
  weight={Platform.OS === 'ios' ? '600' : 'bold'}
14
14
  style={style ?? {
15
15
  marginTop: Platform.OS === 'android' ? 50 : 30,
16
- paddingHorizontal: props.ph ?? 40,
16
+ paddingHorizontal: props.ph ?? 20,
17
17
  textTransform: 'capitalize',
18
18
  color: props.titleColor || theme.colors.textNormal,
19
19
  }}