ordering-ui-react-native 0.22.60 → 0.22.61-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 +5 -7
- package/src/DeliveryApp.tsx +1 -1
- package/src/components/BusinessesListing/index.tsx +1 -1
- package/src/components/Checkout/index.tsx +40 -39
- package/src/components/VerifyPhone/styles.tsx +1 -2
- package/src/context/OfflineActions/index.tsx +236 -0
- package/src/providers/AlertProvider.tsx +3 -1
- package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +5 -3
- package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
- package/themes/business/src/components/BusinessController/index.tsx +8 -3
- package/themes/business/src/components/BusinessProductList/index.tsx +3 -2
- package/themes/business/src/components/Chat/index.tsx +15 -3
- package/themes/business/src/components/DriverMap/index.tsx +44 -33
- package/themes/business/src/components/FloatingButton/index.tsx +3 -2
- package/themes/business/src/components/LanguageSelector/index.tsx +1 -1
- package/themes/business/src/components/LoginForm/index.tsx +123 -98
- package/themes/business/src/components/LogoutButton/index.tsx +13 -4
- package/themes/business/src/components/MapView/RenderMarker.tsx +146 -0
- package/themes/business/src/components/MapView/index.tsx +68 -142
- package/themes/business/src/components/NewOrderNotification/index.tsx +39 -55
- package/themes/business/src/components/OrderDetails/Business.tsx +56 -20
- package/themes/business/src/components/OrderDetails/Delivery.tsx +123 -54
- package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +146 -36
- package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +51 -28
- package/themes/business/src/components/OrderDetails/styles.tsx +39 -3
- package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +17 -16
- package/themes/business/src/components/OrderDetailsLogistic/index.tsx +3 -2
- package/themes/business/src/components/OrderSummary/index.tsx +271 -176
- package/themes/business/src/components/OrdersListManager/index.tsx +13 -1
- package/themes/business/src/components/OrdersOption/index.tsx +345 -231
- package/themes/business/src/components/OrdersOption/styles.tsx +14 -0
- package/themes/business/src/components/PreviousMessages/index.tsx +26 -3
- package/themes/business/src/components/PreviousOrders/OrderItem.tsx +30 -18
- package/themes/business/src/components/PreviousOrders/index.tsx +74 -66
- package/themes/business/src/components/PreviousOrders/styles.tsx +2 -1
- package/themes/business/src/components/PrinterEdition/MessageAlert.tsx +33 -0
- package/themes/business/src/components/PrinterEdition/index.tsx +143 -75
- package/themes/business/src/components/PrinterEdition/printerList.tsx +23 -0
- package/themes/business/src/components/PrinterSettings/index.tsx +1 -1
- package/themes/business/src/components/ProductItemAccordion/index.tsx +3 -2
- package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
- package/themes/business/src/components/StoresList/index.tsx +2 -2
- package/themes/business/src/components/UserProfileForm/index.tsx +48 -10
- package/themes/business/src/components/UserProfileForm/styles.tsx +7 -0
- package/themes/business/src/components/WebsocketStatus/index.tsx +2 -2
- package/themes/business/src/config/currency.tsx +1010 -0
- package/themes/business/src/hooks/useLocation.tsx +16 -12
- package/themes/business/src/layouts/SafeAreaContainer.tsx +35 -19
- package/themes/business/src/types/index.tsx +33 -7
- package/themes/business/src/utils/index.tsx +28 -3
- 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 +9 -5
- package/themes/kiosk/src/components/CustomerName/index.tsx +1 -1
- 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/PaymentOptions/index.tsx +121 -57
- package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
- package/themes/original/index.tsx +223 -219
- package/themes/original/src/components/AddressForm/index.tsx +56 -22
- package/themes/original/src/components/AppleLogin/index.tsx +4 -4
- package/themes/original/src/components/BusinessBasicInformation/index.tsx +1 -1
- package/themes/original/src/components/BusinessController/index.tsx +4 -2
- package/themes/original/src/components/BusinessItemAccordion/index.tsx +10 -4
- package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +103 -92
- package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +7 -3
- package/themes/original/src/components/BusinessListingSearch/index.tsx +8 -13
- package/themes/original/src/components/BusinessPreorder/index.tsx +34 -15
- package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +73 -70
- package/themes/original/src/components/BusinessProductsList/index.tsx +6 -7
- package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
- package/themes/original/src/components/BusinessProductsListing/index.tsx +10 -6
- package/themes/original/src/components/BusinessTypeFilter/index.tsx +9 -8
- package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
- package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
- package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
- package/themes/original/src/components/Cart/index.tsx +50 -14
- package/themes/original/src/components/CartContent/index.tsx +2 -3
- package/themes/original/src/components/Checkout/index.tsx +133 -90
- package/themes/original/src/components/Favorite/index.tsx +1 -5
- package/themes/original/src/components/ForgotPasswordForm/index.tsx +1 -2
- package/themes/original/src/components/GPSButton/index.tsx +2 -1
- package/themes/original/src/components/GoogleMap/index.tsx +4 -3
- package/themes/original/src/components/Help/functions.tsx +76 -0
- package/themes/original/src/components/Help/index.tsx +74 -29
- package/themes/original/src/components/Help/styles.tsx +4 -1
- package/themes/original/src/components/HelpOptions/index.tsx +44 -0
- package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
- package/themes/original/src/components/Home/index.tsx +37 -12
- package/themes/original/src/components/LoginForm/index.tsx +11 -5
- package/themes/original/src/components/MessageListing/index.tsx +1 -1
- package/themes/original/src/components/Messages/index.tsx +20 -13
- package/themes/original/src/components/MomentOption/TimeListItem.tsx +56 -0
- package/themes/original/src/components/MomentOption/index.tsx +67 -49
- package/themes/original/src/components/MomentSelector/index.tsx +5 -2
- package/themes/original/src/components/MultiCheckout/index.tsx +78 -36
- package/themes/original/src/components/MyOrders/index.tsx +2 -2
- package/themes/original/src/components/NavBar/index.tsx +6 -2
- package/themes/original/src/components/NotFoundSource/index.tsx +40 -39
- package/themes/original/src/components/NotFoundSource/styles.tsx +18 -9
- package/themes/original/src/components/OrderDetails/OrderEta.tsx +4 -3
- package/themes/original/src/components/OrderDetails/OrderHistory.tsx +11 -4
- package/themes/original/src/components/OrderDetails/index.tsx +43 -19
- package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
- package/themes/original/src/components/OrderProgress/index.tsx +4 -3
- package/themes/original/src/components/OrderSummary/index.tsx +32 -11
- package/themes/original/src/components/OrderTypeSelector/index.tsx +4 -3
- package/themes/original/src/components/OrdersOption/index.tsx +3 -6
- package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
- package/themes/original/src/components/PaymentOptions/index.tsx +471 -459
- package/themes/original/src/components/PhoneInputNumber/index.tsx +92 -7
- package/themes/original/src/components/ProductForm/ActionButton.tsx +6 -10
- package/themes/original/src/components/ProductItemAccordion/index.tsx +28 -37
- package/themes/original/src/components/ProductOptionSubOption/index.tsx +15 -14
- package/themes/original/src/components/ServiceForm/index.tsx +1 -1
- package/themes/original/src/components/SignupForm/index.tsx +40 -24
- package/themes/original/src/components/SingleOrderCard/index.tsx +7 -4
- package/themes/original/src/components/SingleProductCard/index.tsx +3 -4
- package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
- package/themes/original/src/components/StripeCardsList/index.tsx +9 -4
- package/themes/original/src/components/StripeElementsForm/index.tsx +2 -2
- package/themes/original/src/components/StripeElementsForm/naked.tsx +1 -1
- package/themes/original/src/components/TaxInformation/index.tsx +3 -2
- package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +7 -2
- package/themes/original/src/components/UserDetails/index.tsx +17 -16
- package/themes/original/src/components/UserFormDetails/index.tsx +109 -67
- package/themes/original/src/components/UserProfile/index.tsx +9 -1
- package/themes/original/src/components/UserVerification/index.tsx +18 -5
- package/themes/original/src/components/shared/OAlert.tsx +2 -1
- package/themes/original/src/components/shared/OButton.tsx +2 -2
- package/themes/original/src/components/shared/OInput.tsx +4 -8
- package/themes/original/src/components/shared/OModal.tsx +7 -2
- package/themes/original/src/types/index.tsx +699 -692
- package/themes/original/src/utils/index.tsx +29 -0
- package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
- package/themes/original/src/components/HelpAccountAndPayment/index.tsx +0 -62
- package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +0 -12
- package/themes/original/src/components/HelpGuide/index.tsx +0 -68
- package/themes/original/src/components/HelpGuide/styles.tsx +0 -12
- package/themes/original/src/components/HelpOrder/index.tsx +0 -71
- package/themes/original/src/components/HelpOrder/styles.tsx +0 -13
package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx
CHANGED
|
@@ -1,87 +1,90 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
|
-
import { useTheme } from 'styled-components/native'
|
|
3
2
|
import { StyleSheet } from 'react-native'
|
|
4
|
-
import { SubCategoriesContainer, ContainerButton } from './styles'
|
|
5
|
-
import { OButton } from '../../shared'
|
|
6
3
|
import { useLanguage } from 'ordering-components/native'
|
|
4
|
+
import FIcon from 'react-native-vector-icons/Feather'
|
|
5
|
+
import { SubCategoriesContainer, ContainerButton } from './styles'
|
|
6
|
+
import { OButton, OText } from '../../shared'
|
|
7
7
|
|
|
8
8
|
function SubcategoriesComponentPropsAreEqual(prev: any, next: any) {
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
return prev.subcategoriesSelected === next.subcategoriesSelected &&
|
|
10
|
+
prev.category === next.category
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
interface SubcategoriesComponentParams {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
subcategoriesSelected?: any,
|
|
15
|
+
category?: any,
|
|
16
|
+
onClickSubcategory: any
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
const SubcategoriesComponent = (props
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
const SubcategoriesComponent = (props: SubcategoriesComponentParams) => {
|
|
20
|
+
const {
|
|
21
|
+
subcategoriesSelected,
|
|
22
|
+
category,
|
|
23
|
+
onClickSubcategory
|
|
24
|
+
} = props
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const allsubcategorySelected = !subcategoriesSelected?.some((subcategory: any) => category?.id === subcategory?.parent_category_id)
|
|
26
|
+
const [, t] = useLanguage()
|
|
27
|
+
const allsubcategorySelected = !subcategoriesSelected?.some((subcategory: any) => category?.id === subcategory?.parent_category_id)
|
|
29
28
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
marginLeft: 5,
|
|
43
|
-
marginRight: 5,
|
|
44
|
-
marginBottom: 10,
|
|
45
|
-
height: 35,
|
|
46
|
-
paddingLeft: 3,
|
|
47
|
-
paddingRight: 3,
|
|
48
|
-
}
|
|
49
|
-
});
|
|
29
|
+
const bpStyles = StyleSheet.create({
|
|
30
|
+
categoryButtonStyle: {
|
|
31
|
+
borderWidth: 0,
|
|
32
|
+
marginRight: 5,
|
|
33
|
+
borderRadius: 8,
|
|
34
|
+
marginBottom: 5,
|
|
35
|
+
height: 35,
|
|
36
|
+
padding: 0,
|
|
37
|
+
paddingLeft: 3,
|
|
38
|
+
paddingRight: 3,
|
|
39
|
+
}
|
|
40
|
+
});
|
|
50
41
|
|
|
51
42
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
43
|
+
return (
|
|
44
|
+
<SubCategoriesContainer>
|
|
45
|
+
<ContainerButton
|
|
46
|
+
isSelected={allsubcategorySelected}
|
|
47
|
+
>
|
|
48
|
+
<OButton
|
|
49
|
+
onClick={() => onClickSubcategory(null, category)}
|
|
50
|
+
text={
|
|
51
|
+
allsubcategorySelected
|
|
52
|
+
? <OText color='#FFF'>
|
|
53
|
+
{t('ALL', 'All')}{' '}
|
|
54
|
+
<FIcon name='x-circle' size={16} />
|
|
55
|
+
</OText>
|
|
56
|
+
: t('ALL', 'All')
|
|
57
|
+
}
|
|
58
|
+
style={bpStyles.categoryButtonStyle}
|
|
59
|
+
textStyle={{ fontSize: 12 }}
|
|
60
|
+
/>
|
|
61
|
+
</ContainerButton>
|
|
62
|
+
{category?.subcategories?.map((subcategory: any) => {
|
|
63
|
+
const isSubcategorySelected = subcategoriesSelected?.find((_subcategory: any) => _subcategory?.id === subcategory?.id)
|
|
64
|
+
return (
|
|
65
|
+
<ContainerButton
|
|
66
|
+
key={subcategory?.id}
|
|
67
|
+
isSelected={isSubcategorySelected}
|
|
68
|
+
>
|
|
69
|
+
<OButton
|
|
70
|
+
onClick={() => onClickSubcategory(subcategory, category)}
|
|
71
|
+
text={
|
|
72
|
+
isSubcategorySelected
|
|
73
|
+
? <OText color='#FFF'>
|
|
74
|
+
{subcategory?.name}{' '}
|
|
75
|
+
<FIcon name='x-circle' size={16} />
|
|
76
|
+
</OText>
|
|
77
|
+
: subcategory?.name
|
|
78
|
+
}
|
|
79
|
+
style={bpStyles.categoryButtonStyle}
|
|
80
|
+
textStyle={{ fontSize: 12 }}
|
|
81
|
+
/>
|
|
82
|
+
</ContainerButton>
|
|
83
|
+
)
|
|
84
|
+
}
|
|
85
|
+
)}
|
|
86
|
+
</SubCategoriesContainer>
|
|
87
|
+
)
|
|
85
88
|
}
|
|
86
89
|
|
|
87
90
|
export const SubcategoriesComponentMemoized = React.memo(SubcategoriesComponent, SubcategoriesComponentPropsAreEqual)
|
|
@@ -65,11 +65,10 @@ const BusinessProductsListUI = (props: BusinessProductsListParams) => {
|
|
|
65
65
|
return
|
|
66
66
|
}
|
|
67
67
|
const categoryFounded = subcategoriesSelected.find((_subcategory: any) => subCategory?.id === _subcategory?.id)
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}
|
|
68
|
+
setSubcategoriesSelected?.(categoryFounded
|
|
69
|
+
? subcategoriesSelected.filter((_subcategory: any) => subCategory?.id !== _subcategory?.id)
|
|
70
|
+
: [...subcategoriesSelected, subCategory]
|
|
71
|
+
)
|
|
73
72
|
}
|
|
74
73
|
|
|
75
74
|
return (
|
|
@@ -214,11 +213,11 @@ const BusinessProductsListUI = (props: BusinessProductsListParams) => {
|
|
|
214
213
|
text={t('VIEW_MORE', 'View more')}
|
|
215
214
|
parentStyle={{ padding: 0 }}
|
|
216
215
|
onClick={() => setOpenDescription(category)}
|
|
217
|
-
bgColor=
|
|
216
|
+
bgColor={theme.colors.white}
|
|
217
|
+
borderColor={theme.colors.primary}
|
|
218
218
|
textStyle={{
|
|
219
219
|
fontSize: 12,
|
|
220
220
|
borderBottomWidth: 1,
|
|
221
|
-
borderBottomColor: theme.colors.primary,
|
|
222
221
|
color: theme.colors.primary
|
|
223
222
|
}}
|
|
224
223
|
/>
|
|
@@ -18,15 +18,12 @@ export const RibbonBox = styled.View`
|
|
|
18
18
|
background-color: ${(props: any) => props.theme.colors.primary};
|
|
19
19
|
padding: 2px 8px;
|
|
20
20
|
max-width: 180px;
|
|
21
|
-
|
|
22
21
|
${(props: any) => props.bgColor && css`
|
|
23
22
|
background-color: ${props.bgColor};
|
|
24
23
|
`}
|
|
25
|
-
|
|
26
24
|
${(props: any) => props.isRoundRect && css`
|
|
27
25
|
border-radius: 7.6px;
|
|
28
26
|
`}
|
|
29
|
-
|
|
30
27
|
${(props: any) => props.isCapsule && css`
|
|
31
28
|
border-radius: 50px;
|
|
32
29
|
`}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useCallback, useEffect, useRef, useState } from 'react'
|
|
2
|
-
import { View, TouchableOpacity, StyleSheet, SafeAreaView, Dimensions, Platform, KeyboardAvoidingViewBase, KeyboardAvoidingView, Keyboard, KeyboardEvent, BackHandler, ScrollView } from 'react-native'
|
|
2
|
+
import { View, TouchableOpacity, StyleSheet, SafeAreaView, Dimensions, Platform, KeyboardAvoidingViewBase, KeyboardAvoidingView, Keyboard, KeyboardEvent, BackHandler, ScrollView, Vibration } from 'react-native'
|
|
3
3
|
import { IOScrollView } from 'react-native-intersection-observer'
|
|
4
4
|
import { useSafeAreaInsets } from 'react-native-safe-area-context'
|
|
5
5
|
import { useTheme } from 'styled-components/native';
|
|
@@ -225,8 +225,9 @@ const BusinessProductsListingUI = (props: BusinessProductsListingParams) => {
|
|
|
225
225
|
cartUuid: cart?.uuid,
|
|
226
226
|
businessLogo: cart?.business?.logo,
|
|
227
227
|
businessName: cart?.business?.name,
|
|
228
|
-
cartTotal: cart?.total
|
|
229
|
-
|
|
228
|
+
cartTotal: cart?.total,
|
|
229
|
+
fromProductsList: true
|
|
230
|
+
})
|
|
230
231
|
} else {
|
|
231
232
|
const groupKeys: any = {}
|
|
232
233
|
cartsAvailable.forEach((_cart: any) => {
|
|
@@ -242,12 +243,12 @@ const BusinessProductsListingUI = (props: BusinessProductsListingParams) => {
|
|
|
242
243
|
props.onNavigationRedirect('CheckoutNavigator', {
|
|
243
244
|
screen: 'MultiCheckout',
|
|
244
245
|
checkCarts: true
|
|
245
|
-
}
|
|
246
|
+
})
|
|
246
247
|
} else {
|
|
247
248
|
props.onNavigationRedirect('CheckoutNavigator', {
|
|
248
249
|
screen: 'MultiCheckout',
|
|
249
250
|
cartUuid: cartsAvailable[0]?.group?.uuid
|
|
250
|
-
}
|
|
251
|
+
})
|
|
251
252
|
}
|
|
252
253
|
}
|
|
253
254
|
}
|
|
@@ -687,7 +688,10 @@ const BusinessProductsListingUI = (props: BusinessProductsListingParams) => {
|
|
|
687
688
|
btnLeftValue={currentCart?.products.reduce((prev: number, product: any) => prev + product.quantity, 0)}
|
|
688
689
|
btnRightValue={parsePrice(currentCart?.total)}
|
|
689
690
|
disabled={subtotalWithTaxes < currentCart?.minimum || openUpselling}
|
|
690
|
-
handleClick={() =>
|
|
691
|
+
handleClick={() => {
|
|
692
|
+
Vibration.vibrate(100)
|
|
693
|
+
setOpenUpselling(true)
|
|
694
|
+
}}
|
|
691
695
|
/>
|
|
692
696
|
</View>
|
|
693
697
|
)}
|
|
@@ -26,9 +26,9 @@ import { BusinessTypeFilterParams } from '../../types';
|
|
|
26
26
|
const windowWidth = Dimensions.get('window').width;
|
|
27
27
|
|
|
28
28
|
export const BusinessTypeFilterUI = (props: BusinessTypeFilterParams) => {
|
|
29
|
-
const {
|
|
30
|
-
typesState,
|
|
31
|
-
currentTypeSelected,
|
|
29
|
+
const {
|
|
30
|
+
typesState,
|
|
31
|
+
currentTypeSelected,
|
|
32
32
|
handleChangeBusinessType,
|
|
33
33
|
setBusinessTypes,
|
|
34
34
|
isAppoint
|
|
@@ -38,13 +38,13 @@ export const BusinessTypeFilterUI = (props: BusinessTypeFilterParams) => {
|
|
|
38
38
|
|
|
39
39
|
const theme = useTheme();
|
|
40
40
|
const [isOpenAllCategories, setIsOpenAllCategories] = useState(false)
|
|
41
|
-
const defaultImage = (name
|
|
41
|
+
const defaultImage = (name: string) => theme.images?.categories?.[name.toLowerCase().replace(' ', '')]
|
|
42
42
|
|
|
43
43
|
useEffect(() => {
|
|
44
|
-
if(typesState?.types?.length > 0){
|
|
45
|
-
|
|
44
|
+
if (typesState?.types?.length > 0) {
|
|
45
|
+
setBusinessTypes && setBusinessTypes(typesState?.types)
|
|
46
46
|
}
|
|
47
|
-
|
|
47
|
+
}, [typesState])
|
|
48
48
|
|
|
49
49
|
const handleChangeServiceType = (serviceId: any) => {
|
|
50
50
|
if (serviceId === currentTypeSelected) {
|
|
@@ -119,10 +119,11 @@ export const BusinessTypeFilterUI = (props: BusinessTypeFilterParams) => {
|
|
|
119
119
|
<OButton
|
|
120
120
|
key={i}
|
|
121
121
|
bgColor={(currentTypeSelected === businessType?.id) ? theme.colors.primary : theme.colors.backgroundGray200}
|
|
122
|
+
borderColor={(currentTypeSelected === businessType?.id) ? theme.colors.primary : theme.colors.backgroundGray200}
|
|
122
123
|
onClick={() => handleChangeServiceType(businessType?.id)}
|
|
123
124
|
text={`${businessType?.name} ${(currentTypeSelected === businessType?.id) ? ' X' : ''}`}
|
|
124
125
|
style={styles.businessType}
|
|
125
|
-
textStyle={{ fontSize: 10, color: (currentTypeSelected === businessType?.id) ? theme.colors.
|
|
126
|
+
textStyle={{ fontSize: 10, color: (currentTypeSelected === businessType?.id) ? theme.colors.white : theme.colors.textNormal }}
|
|
126
127
|
/>
|
|
127
128
|
))}
|
|
128
129
|
</ServiceWrapper>
|
|
@@ -392,10 +392,11 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
|
|
|
392
392
|
<OButton
|
|
393
393
|
key={i}
|
|
394
394
|
bgColor={(priceLevelSelected === price?.level) ? theme.colors.primary : theme.colors.backgroundGray200}
|
|
395
|
+
borderColor={(priceLevelSelected === price?.level) ? theme.colors.primary : theme.colors.backgroundGray200}
|
|
395
396
|
onClick={() => handleChangePriceLevel(price?.level)}
|
|
396
397
|
text={`${price.content} ${(priceLevelSelected === price?.level) ? ' X' : ''}`}
|
|
397
398
|
style={styles.priceLevel}
|
|
398
|
-
textStyle={{ fontSize: 10, color: (priceLevelSelected === price?.level) ? theme.colors.backgroundLight : theme.colors.
|
|
399
|
+
textStyle={{ fontSize: 10, color: (priceLevelSelected === price?.level) ? theme.colors.backgroundLight : theme.colors.black }}
|
|
399
400
|
/>
|
|
400
401
|
))}
|
|
401
402
|
</ScrollView>
|
|
@@ -60,7 +60,7 @@ export const WrapMomentOption = styled.TouchableOpacity`
|
|
|
60
60
|
|
|
61
61
|
export const HeaderWrapper = styled.ImageBackground`
|
|
62
62
|
width: 100%;
|
|
63
|
-
height:
|
|
63
|
+
height: 270px;
|
|
64
64
|
padding: 20px;
|
|
65
65
|
background-color: transparent;
|
|
66
66
|
`;
|
|
@@ -19,7 +19,7 @@ import { CouponControl } from '../CouponControl';
|
|
|
19
19
|
import { OButton, OInput, OModal, OText } from '../shared';
|
|
20
20
|
import { UpsellingProducts } from '../UpsellingProducts';
|
|
21
21
|
import { verifyDecimals } from '../../utils';
|
|
22
|
-
import { ActivityIndicator, TouchableOpacity, View } from 'react-native';
|
|
22
|
+
import { ActivityIndicator, TouchableOpacity, View, Vibration } from 'react-native';
|
|
23
23
|
import AntIcon from 'react-native-vector-icons/AntDesign'
|
|
24
24
|
import { TaxInformation } from '../TaxInformation';
|
|
25
25
|
import { CartStoresListing } from '../CartStoresListing';
|
|
@@ -73,6 +73,7 @@ const CartUI = (props: any) => {
|
|
|
73
73
|
const [openTaxModal, setOpenTaxModal] = useState<any>({ open: false, data: null, type: '' })
|
|
74
74
|
const [openPlaceModal, setOpenPlaceModal] = useState(false)
|
|
75
75
|
const [maxDate, setMaxDate] = useState<any>(null)
|
|
76
|
+
const [comment] = useState<any>(cart?.comment ?? '')
|
|
76
77
|
const isCartPending = cart?.status === 2
|
|
77
78
|
const isCouponEnabled = validationFields?.fields?.checkout?.coupon?.enabled
|
|
78
79
|
const business: any = (orderState?.carts && Object.values(orderState.carts).find((_cart: any) => _cart?.uuid === props.cartuuid)) ?? {}
|
|
@@ -83,6 +84,7 @@ const CartUI = (props: any) => {
|
|
|
83
84
|
const driverTipsOptions = typeof configs?.driver_tip_options?.value === 'string'
|
|
84
85
|
? JSON.parse(configs?.driver_tip_options?.value) || []
|
|
85
86
|
: configs?.driver_tip_options?.value || []
|
|
87
|
+
const allowDriverTipPickup = configs?.driver_tip_allowed_at_pickup?.value === '1' && orderState?.options?.type === 2
|
|
86
88
|
|
|
87
89
|
const momentFormatted = !orderState?.option?.moment
|
|
88
90
|
? t('RIGHT_NOW', 'Right Now')
|
|
@@ -114,6 +116,7 @@ const CartUI = (props: any) => {
|
|
|
114
116
|
}
|
|
115
117
|
|
|
116
118
|
const handleUpsellingPage = (individualCart: any) => {
|
|
119
|
+
Vibration.vibrate(100)
|
|
117
120
|
const isProductCartParam = !!individualCart?.products?.length
|
|
118
121
|
setOpenUpselling(false)
|
|
119
122
|
setCanOpenUpselling(false)
|
|
@@ -128,8 +131,9 @@ const CartUI = (props: any) => {
|
|
|
128
131
|
cartUuid: cart?.uuid,
|
|
129
132
|
businessLogo: cart?.business?.logo,
|
|
130
133
|
businessName: cart?.business?.name,
|
|
131
|
-
cartTotal: cart?.total
|
|
132
|
-
|
|
134
|
+
cartTotal: cart?.total,
|
|
135
|
+
fromProductsList: isFromUpselling
|
|
136
|
+
})
|
|
133
137
|
} else {
|
|
134
138
|
const groupKeys: any = {}
|
|
135
139
|
cartsAvailable.forEach((_cart: any) => {
|
|
@@ -145,28 +149,30 @@ const CartUI = (props: any) => {
|
|
|
145
149
|
onNavigationRedirect('CheckoutNavigator', {
|
|
146
150
|
screen: 'MultiCheckout',
|
|
147
151
|
checkCarts: true
|
|
148
|
-
}
|
|
152
|
+
})
|
|
149
153
|
} else {
|
|
150
154
|
onNavigationRedirect('CheckoutNavigator', {
|
|
151
155
|
screen: 'MultiCheckout',
|
|
152
156
|
cartUuid: cartsAvailable[0]?.group?.uuid
|
|
153
|
-
}
|
|
157
|
+
})
|
|
154
158
|
}
|
|
155
159
|
}
|
|
156
160
|
}
|
|
157
161
|
|
|
158
|
-
const getIncludedTaxes = () => {
|
|
162
|
+
const getIncludedTaxes = (isDeliveryFee?: boolean) => {
|
|
159
163
|
if (cart?.taxes === null || !cart?.taxes) {
|
|
160
|
-
return cart
|
|
164
|
+
return cart?.business.tax_type === 1 ? cart?.tax : 0
|
|
161
165
|
} else {
|
|
162
166
|
return cart?.taxes.reduce((taxIncluded: number, tax: any) => {
|
|
163
|
-
return taxIncluded +
|
|
167
|
+
return taxIncluded +
|
|
168
|
+
(((!isDeliveryFee && tax.type === 1 && tax.target === 'product') ||
|
|
169
|
+
(isDeliveryFee && tax.type === 1 && tax.target === 'delivery_fee')) ? tax.summary?.tax : 0)
|
|
164
170
|
}, 0)
|
|
165
171
|
}
|
|
166
172
|
}
|
|
167
173
|
|
|
168
174
|
const getIncludedTaxesDiscounts = () => {
|
|
169
|
-
return cart?.taxes?.filter((tax: any) => tax?.type === 1)?.reduce((carry: number, tax: any) => carry + (tax?.summary?.tax_after_discount ?? tax?.summary?.tax), 0)
|
|
175
|
+
return cart?.taxes?.filter((tax: any) => (tax?.type === 1 && tax?.target === 'product'))?.reduce((carry: number, tax: any) => carry + (tax?.summary?.tax_after_discount ?? tax?.summary?.tax), 0)
|
|
170
176
|
}
|
|
171
177
|
|
|
172
178
|
const OfferAlert = ({ offerId }: any) => {
|
|
@@ -197,6 +203,7 @@ const CartUI = (props: any) => {
|
|
|
197
203
|
}, cart?.subtotal)
|
|
198
204
|
|
|
199
205
|
const handleClickCheckout = () => {
|
|
206
|
+
Vibration.vibrate(100)
|
|
200
207
|
if (cart?.business_id) {
|
|
201
208
|
setOpenUpselling(true)
|
|
202
209
|
} else {
|
|
@@ -243,7 +250,10 @@ const CartUI = (props: any) => {
|
|
|
243
250
|
handleClearProducts={handleClearProducts}
|
|
244
251
|
handleCartOpen={handleCartOpen}
|
|
245
252
|
onNavigationRedirect={props.onNavigationRedirect}
|
|
246
|
-
handleChangeStore={() =>
|
|
253
|
+
handleChangeStore={() => {
|
|
254
|
+
Vibration.vibrate(100)
|
|
255
|
+
setOpenChangeStore(true)
|
|
256
|
+
}}
|
|
247
257
|
handleClickCheckout={() => handleClickCheckout()}
|
|
248
258
|
checkoutButtonDisabled={(openUpselling && !canOpenUpselling) || subtotalWithTaxes < cart?.minimum || !cart?.valid_address}
|
|
249
259
|
isMultiCheckout={isMultiCheckout}
|
|
@@ -324,7 +334,7 @@ const CartUI = (props: any) => {
|
|
|
324
334
|
</OSTable>
|
|
325
335
|
)}
|
|
326
336
|
{
|
|
327
|
-
cart.taxes?.length > 0 && cart.taxes.filter((tax: any) => tax.type === 2 && tax?.rate !== 0).map((tax: any, i: number) => (
|
|
337
|
+
cart.taxes?.length > 0 && cart.taxes.filter((tax: any) => tax.type === 2 && tax?.rate !== 0 && tax?.target === 'product').map((tax: any, i: number) => (
|
|
328
338
|
<OSTable key={`${tax.id}_${i}`}>
|
|
329
339
|
<OSRow>
|
|
330
340
|
<OText size={12} lineHeight={18} numberOfLines={1} >
|
|
@@ -379,9 +389,25 @@ const CartUI = (props: any) => {
|
|
|
379
389
|
{orderState?.options?.type === 1 && cart?.delivery_price_with_discount > 0 && !hideDeliveryFee && (
|
|
380
390
|
<OSTable>
|
|
381
391
|
<OText size={12} lineHeight={18}>{t('DELIVERY_FEE', 'Delivery Fee')}</OText>
|
|
382
|
-
<OText size={12} lineHeight={18}>{parsePrice(cart?.delivery_price_with_discount)}</OText>
|
|
392
|
+
<OText size={12} lineHeight={18}>{parsePrice(cart?.delivery_price_with_discount + getIncludedTaxes(true))}</OText>
|
|
383
393
|
</OSTable>
|
|
384
394
|
)}
|
|
395
|
+
{
|
|
396
|
+
cart?.taxes?.length > 0 && cart?.taxes?.filter((tax: any) => tax?.type === 2 && tax?.rate !== 0 && tax?.target === 'delivery_fee').map((tax: any, i: number) => (
|
|
397
|
+
<OSTable key={`${tax.description}_${i}`}>
|
|
398
|
+
<OSRow>
|
|
399
|
+
<OText size={12} lineHeight={18} numberOfLines={1}>
|
|
400
|
+
{tax.name || t('INHERIT_FROM_BUSINESS', 'Inherit from business')}
|
|
401
|
+
{`(${verifyDecimals(tax?.rate, parseNumber)}%)`}
|
|
402
|
+
</OText>
|
|
403
|
+
<TouchableOpacity onPress={() => setOpenTaxModal({ open: true, data: tax, type: 'tax' })}>
|
|
404
|
+
<AntIcon name='infocirlceo' size={16} color={theme.colors.primary} />
|
|
405
|
+
</TouchableOpacity>
|
|
406
|
+
</OSRow>
|
|
407
|
+
<OText size={12} lineHeight={18}>{parsePrice(tax?.summary?.tax_after_discount ?? tax?.summary?.tax ?? 0)}</OText>
|
|
408
|
+
</OSTable>
|
|
409
|
+
))
|
|
410
|
+
}
|
|
385
411
|
{
|
|
386
412
|
cart?.offers?.length > 0 && cart?.offers?.filter((offer: any) => offer?.target === 2)?.map((offer: any, i: number) => (
|
|
387
413
|
<OSTable key={`${offer.id}_${i}`}>
|
|
@@ -440,7 +466,7 @@ const CartUI = (props: any) => {
|
|
|
440
466
|
{!isMultiCheckout &&
|
|
441
467
|
cart &&
|
|
442
468
|
cart?.valid &&
|
|
443
|
-
orderState?.options?.type === 1 &&
|
|
469
|
+
(orderState?.options?.type === 1 || allowDriverTipPickup) &&
|
|
444
470
|
cart?.status !== 2 &&
|
|
445
471
|
validationFields?.fields?.checkout?.driver_tip?.enabled &&
|
|
446
472
|
driverTipsOptions && driverTipsOptions?.length > 0 &&
|
|
@@ -499,7 +525,7 @@ const CartUI = (props: any) => {
|
|
|
499
525
|
<OText size={16} lineHeight={18}>{t('COMMENTS', 'Comments')}</OText>
|
|
500
526
|
<View style={{ flex: 1, width: '100%' }}>
|
|
501
527
|
<OInput
|
|
502
|
-
value={cart?.comment}
|
|
528
|
+
value={comment || cart?.comment}
|
|
503
529
|
placeholder={t('SPECIAL_COMMENTS', 'Special Comments')}
|
|
504
530
|
onChange={(value: string) => handleChangeComment(value)}
|
|
505
531
|
style={{
|
|
@@ -544,6 +570,14 @@ const CartUI = (props: any) => {
|
|
|
544
570
|
/>
|
|
545
571
|
</View>
|
|
546
572
|
)}
|
|
573
|
+
{!cart?.valid_address && cart?.status !== 2 && (
|
|
574
|
+
<OText
|
|
575
|
+
color={theme.colors.error}
|
|
576
|
+
size={12}
|
|
577
|
+
>
|
|
578
|
+
{t('INVALID_CART_ADDRESS', 'Selected address is invalid, please select a closer address.')}
|
|
579
|
+
</OText>
|
|
580
|
+
)}
|
|
547
581
|
{(!isMultiCheckout || !cart?.business_id) && (
|
|
548
582
|
<>
|
|
549
583
|
{cart?.valid_products ? (
|
|
@@ -557,6 +591,7 @@ const CartUI = (props: any) => {
|
|
|
557
591
|
`${t('MINIMUN_SUBTOTAL_ORDER', 'Minimum subtotal order:')} ${parsePrice(cart?.minimum)}`
|
|
558
592
|
)}
|
|
559
593
|
bgColor={(subtotalWithTaxes < cart?.minimum || !cart?.valid_address) ? theme.colors.secundary : theme.colors.primary}
|
|
594
|
+
borderColor={(subtotalWithTaxes < cart?.minimum || !cart?.valid_address) ? theme.colors.secundary : theme.colors.primary}
|
|
560
595
|
isDisabled={(openUpselling && !canOpenUpselling) || subtotalWithTaxes < cart?.minimum || !cart?.valid_address}
|
|
561
596
|
imgRightSrc={null}
|
|
562
597
|
textStyle={{ textAlign: 'center', flex: 1 }}
|
|
@@ -616,6 +651,7 @@ const CartUI = (props: any) => {
|
|
|
616
651
|
export const Cart = (props: any) => {
|
|
617
652
|
const cartProps = {
|
|
618
653
|
...props,
|
|
654
|
+
disablePreviousComment: true,
|
|
619
655
|
UIComponent: CartUI
|
|
620
656
|
}
|
|
621
657
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useCallback, useEffect, useState } from 'react';
|
|
2
|
-
import { View } from 'react-native';
|
|
2
|
+
import { Vibration, View } from 'react-native';
|
|
3
3
|
import { useLanguage, useConfig, useUtils, useOrder } from 'ordering-components/native';
|
|
4
4
|
import { useTheme } from 'styled-components/native';
|
|
5
5
|
import { CCContainer, CCNotCarts, CCList, CheckoutAction, ChCartsTotal } from './styles';
|
|
@@ -39,6 +39,7 @@ export const CartContent = (props: any) => {
|
|
|
39
39
|
?.filter((cart: any) => cart?.status !== 1 && cart?.valid && cart?.products?.length)
|
|
40
40
|
?.reduce((total: any, cart: any) => { return total + (cart?.delivery_price_with_discount) }, 0)
|
|
41
41
|
const handleCheckoutRedirect = () => {
|
|
42
|
+
Vibration.vibrate(100)
|
|
42
43
|
if (cartsAvailable.length === 1) {
|
|
43
44
|
onNavigationRedirect('CheckoutNavigator', {
|
|
44
45
|
screen: 'CheckoutPage',
|
|
@@ -173,9 +174,7 @@ export const CartContent = (props: any) => {
|
|
|
173
174
|
<CheckoutAction style={{ marginTop: 0 }}>
|
|
174
175
|
<OButton
|
|
175
176
|
text={t('CHECKOUT', 'Checkout')}
|
|
176
|
-
bgColor={!cartsAvailable.length ? theme.colors.secundary : theme.colors.primary}
|
|
177
177
|
isDisabled={!cartsAvailable.length}
|
|
178
|
-
borderColor={!cartsAvailable.length ? theme.colors.secundary : theme.colors.primary}
|
|
179
178
|
imgRightSrc={null}
|
|
180
179
|
onClick={() => handleCheckoutRedirect()}
|
|
181
180
|
style={{ width: '100%', flexDirection: 'row', justifyContent: 'center', borderRadius: 7.6, shadowOpacity: 0 }}
|