ordering-ui-react-native 0.15.38-release → 0.15.39-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 +3 -2
- package/themes/business/src/components/OrderDetails/Delivery.tsx +3 -3
- package/themes/kiosk/src/components/BusinessMenu/index.tsx +39 -28
- package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -3
- package/themes/kiosk/src/components/Cart/index.tsx +10 -11
- package/themes/kiosk/src/components/CartBottomSheet/index.tsx +9 -2
- package/themes/kiosk/src/components/CartContent/index.tsx +0 -11
- package/themes/kiosk/src/components/CartItem/index.tsx +4 -3
- package/themes/kiosk/src/components/CategoriesMenu/index.tsx +107 -62
- package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
- package/themes/kiosk/src/components/DrawerView/index.tsx +1 -0
- package/themes/kiosk/src/components/DrawerView/styles.tsx +2 -2
- package/themes/kiosk/src/components/NavBar/index.tsx +15 -6
- package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +2 -2
- package/themes/kiosk/src/components/PaymentOptions/index.tsx +55 -53
- package/themes/kiosk/src/components/ProductForm/index.tsx +6 -7
- package/themes/kiosk/src/components/ProductItemAccordion/index.tsx +2 -2
- package/themes/kiosk/src/components/ProductOption/index.tsx +1 -1
- package/themes/kiosk/src/components/ProductOptionSubOption/index.tsx +3 -1
- package/themes/kiosk/src/components/UpsellingProducts/index.tsx +16 -5
- package/themes/kiosk/src/types/index.d.ts +1 -0
- package/themes/original/src/components/OrderDetails/index.tsx +10 -7
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ordering-ui-react-native",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.39-release",
|
|
4
4
|
"description": "Reusable components made in react native",
|
|
5
5
|
"main": "src/index.tsx",
|
|
6
6
|
"author": "ordering.inc",
|
|
@@ -124,7 +124,8 @@
|
|
|
124
124
|
"@babel/core": "^7.11.6",
|
|
125
125
|
"@babel/runtime": "^7.11.2",
|
|
126
126
|
"@react-native-community/eslint-config": "^2.0.0",
|
|
127
|
-
"@types/react": "^
|
|
127
|
+
"@types/react": "^18.0.14",
|
|
128
|
+
"@types/react-dom": "^18.0.5",
|
|
128
129
|
"@types/react-native": "^0.63.25",
|
|
129
130
|
"babel-jest": "^26.3.0",
|
|
130
131
|
"eslint": "^7.10.0",
|
|
@@ -247,17 +247,17 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
247
247
|
let isToFollow = false;
|
|
248
248
|
let isBusinessMarker = false;
|
|
249
249
|
|
|
250
|
-
if (order?.status === 7 || order?.status === 8) {
|
|
250
|
+
if (order?.status === 7 || order?.status === 8 || order?.status === 18) {
|
|
251
251
|
const markerBusiness = 'Business';
|
|
252
252
|
isBusinessMarker = true;
|
|
253
253
|
locationMarker = locations.find(
|
|
254
254
|
(location: any) => location.type === markerBusiness,
|
|
255
255
|
);
|
|
256
256
|
|
|
257
|
-
if (order?.status === 8) {
|
|
257
|
+
if (order?.status === 8 || order?.status === 18) {
|
|
258
258
|
isToFollow = true;
|
|
259
259
|
}
|
|
260
|
-
} else if (order?.status === 3 || order?.status === 9) {
|
|
260
|
+
} else if (order?.status === 3 || order?.status === 9 || order?.status === 19 || order?.status === 23) {
|
|
261
261
|
const markerCustomer = 'Customer';
|
|
262
262
|
isToFollow = true;
|
|
263
263
|
isBusinessMarker = false;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
|
-
import { PanResponder, TouchableOpacity, View } from 'react-native';
|
|
2
|
+
import { PanResponder, Platform, TouchableOpacity, View } from 'react-native';
|
|
3
3
|
import {
|
|
4
4
|
useLanguage,
|
|
5
5
|
useOrder,
|
|
@@ -40,7 +40,7 @@ const BusinessMenu = (props:any): React.ReactElement => {
|
|
|
40
40
|
const clearCartWhenTimeOut = () => {
|
|
41
41
|
if (cart?.uuid) clearCart(cart?.uuid)
|
|
42
42
|
}
|
|
43
|
-
const timerId = useRef(false);
|
|
43
|
+
const timerId: any = useRef(false);
|
|
44
44
|
|
|
45
45
|
const clearInactivityTimeout = () =>{
|
|
46
46
|
clearTimeout(timerId.current);
|
|
@@ -93,6 +93,17 @@ const BusinessMenu = (props:any): React.ReactElement => {
|
|
|
93
93
|
else showCartBottomSheet();
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
+
const handleRedirect = () => {
|
|
97
|
+
navigation.navigate('DeliveryType', {
|
|
98
|
+
callback: () => {
|
|
99
|
+
navigation.navigate('Business');
|
|
100
|
+
},
|
|
101
|
+
goBack: () => {
|
|
102
|
+
navigation.goBack();
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
|
|
96
107
|
return (
|
|
97
108
|
<View style={{
|
|
98
109
|
flex: 1,
|
|
@@ -109,31 +120,31 @@ const BusinessMenu = (props:any): React.ReactElement => {
|
|
|
109
120
|
}}
|
|
110
121
|
>
|
|
111
122
|
<Container nopadding nestedScrollEnabled>
|
|
112
|
-
<View style={{ paddingTop: 20 }}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
123
|
+
{Platform.OS === 'android' && (<View style={{ paddingTop: 20 }} />)}
|
|
124
|
+
<NavBar
|
|
125
|
+
title={t('MENU_V21', 'Menu')}
|
|
126
|
+
onActionLeft={goToBack}
|
|
127
|
+
includeOrderTypeSelector
|
|
128
|
+
onClickTypes={handleRedirect}
|
|
129
|
+
rightComponent={cart && (
|
|
130
|
+
<TouchableOpacity
|
|
131
|
+
style={{ flexDirection: 'row', alignItems: 'center' }}
|
|
132
|
+
onPress={onToggleCart}
|
|
133
|
+
>
|
|
134
|
+
<OText
|
|
135
|
+
color={theme.colors.mediumGray}
|
|
121
136
|
>
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
</TouchableOpacity>
|
|
134
|
-
)}
|
|
135
|
-
/>
|
|
136
|
-
</View>
|
|
137
|
+
{`${cart?.products?.length || 0} ${t('ITEMS', 'items')}`} {parsePrice(cart?.total || 0)} {' '}
|
|
138
|
+
</OText>
|
|
139
|
+
|
|
140
|
+
<MaterialIcon
|
|
141
|
+
name={bottomSheetVisibility ? "cart-off" : "cart-outline"}
|
|
142
|
+
color={theme.colors.primary}
|
|
143
|
+
size={30}
|
|
144
|
+
/>
|
|
145
|
+
</TouchableOpacity>
|
|
146
|
+
)}
|
|
147
|
+
/>
|
|
137
148
|
|
|
138
149
|
<BusinessProductsListing
|
|
139
150
|
{ ...businessProductsListingProps }
|
|
@@ -144,7 +155,7 @@ const BusinessMenu = (props:any): React.ReactElement => {
|
|
|
144
155
|
</Container>
|
|
145
156
|
</View>
|
|
146
157
|
|
|
147
|
-
<View
|
|
158
|
+
{/* <View
|
|
148
159
|
style={{
|
|
149
160
|
flex: bottomSheetVisibility && orientationState?.orientation === PORTRAIT ? 0 : 0.8,
|
|
150
161
|
display: bottomSheetVisibility ? 'flex' : 'none'
|
|
@@ -155,7 +166,7 @@ const BusinessMenu = (props:any): React.ReactElement => {
|
|
|
155
166
|
resetInactivityTimeout={resetInactivityTimeout}
|
|
156
167
|
clearInactivityTimeout={clearInactivityTimeout}
|
|
157
168
|
/>
|
|
158
|
-
</View>
|
|
169
|
+
</View> */}
|
|
159
170
|
</View>
|
|
160
171
|
);
|
|
161
172
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import React
|
|
2
|
-
import {
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { PlaceholderLine } from 'rn-placeholder';
|
|
3
3
|
import { View, ScrollView, Platform } from 'react-native';
|
|
4
4
|
import { useTheme } from 'styled-components/native';
|
|
5
5
|
import { useDeviceOrientation } from '../../../../../src/hooks/DeviceOrientation';
|
|
@@ -21,7 +21,6 @@ const BusinessesListingUI = (props: any) => {
|
|
|
21
21
|
navigation,
|
|
22
22
|
businessesList,
|
|
23
23
|
handleBusinessClick,
|
|
24
|
-
paginationProps,
|
|
25
24
|
} = props;
|
|
26
25
|
|
|
27
26
|
const theme = useTheme();
|
|
@@ -110,7 +110,6 @@ const CartUI = (props: any) => {
|
|
|
110
110
|
<NavBar
|
|
111
111
|
title={t('CONFIRM_YOUR_ORDER', 'Confirm your order')}
|
|
112
112
|
onActionLeft={goToBack}
|
|
113
|
-
style={{ height: orientationState?.dimensions?.height * 0.08 }}
|
|
114
113
|
btnStyle={{ paddingLeft: 0 }}
|
|
115
114
|
rightComponent={(
|
|
116
115
|
<OButton
|
|
@@ -238,8 +237,8 @@ const CartUI = (props: any) => {
|
|
|
238
237
|
</OSTable>
|
|
239
238
|
)}
|
|
240
239
|
{
|
|
241
|
-
cart?.offers?.length > 0 && cart?.offers?.filter((offer: any) => offer?.target === 1)?.map((offer: any) => (
|
|
242
|
-
<OSTable key={offer
|
|
240
|
+
cart?.offers?.length > 0 && cart?.offers?.filter((offer: any) => offer?.target === 1)?.map((offer: any, i: number) => (
|
|
241
|
+
<OSTable key={`${offer?.id}_${i}`}>
|
|
243
242
|
<OSRow>
|
|
244
243
|
<OText>{offer.name}</OText>
|
|
245
244
|
{offer.rate_type === 1 && (
|
|
@@ -263,8 +262,8 @@ const CartUI = (props: any) => {
|
|
|
263
262
|
</OSTable>
|
|
264
263
|
)}
|
|
265
264
|
{
|
|
266
|
-
cart.taxes?.length > 0 && cart.taxes.filter((tax: any) => tax.type === 2 && tax?.rate !== 0).map((tax: any) => (
|
|
267
|
-
<OSTable key={tax
|
|
265
|
+
cart.taxes?.length > 0 && cart.taxes.filter((tax: any) => tax.type === 2 && tax?.rate !== 0).map((tax: any, i: number) => (
|
|
266
|
+
<OSTable key={`${tax?.id}_${i}`}>
|
|
268
267
|
<OSRow>
|
|
269
268
|
<OText>
|
|
270
269
|
{tax.name || t('INHERIT_FROM_BUSINESS', 'Inherit from business')}{' '}
|
|
@@ -276,8 +275,8 @@ const CartUI = (props: any) => {
|
|
|
276
275
|
))
|
|
277
276
|
}
|
|
278
277
|
{
|
|
279
|
-
cart?.fees?.length > 0 && cart?.fees?.filter((fee: any) => !(fee.fixed === 0 && fee.percentage === 0)).map((fee: any) => (
|
|
280
|
-
<OSTable key={fee?.id}>
|
|
278
|
+
cart?.fees?.length > 0 && cart?.fees?.filter((fee: any) => !(fee.fixed === 0 && fee.percentage === 0)).map((fee: any, i: number) => (
|
|
279
|
+
<OSTable key={`${fee?.id}_${i}`}>
|
|
281
280
|
<OSRow>
|
|
282
281
|
<OText>
|
|
283
282
|
{fee.name || t('INHERIT_FROM_BUSINESS', 'Inherit from business')}{' '}
|
|
@@ -289,8 +288,8 @@ const CartUI = (props: any) => {
|
|
|
289
288
|
))
|
|
290
289
|
}
|
|
291
290
|
{
|
|
292
|
-
cart?.offers?.length > 0 && cart?.offers?.filter((offer: any) => offer?.target === 3)?.map((offer: any) => (
|
|
293
|
-
<OSTable key={offer
|
|
291
|
+
cart?.offers?.length > 0 && cart?.offers?.filter((offer: any) => offer?.target === 3)?.map((offer: any, i: number) => (
|
|
292
|
+
<OSTable key={`${offer?.id}_${i}`}>
|
|
294
293
|
<OSRow>
|
|
295
294
|
<OText>{offer.name}</OText>
|
|
296
295
|
{offer.rate_type === 1 && (
|
|
@@ -310,8 +309,8 @@ const CartUI = (props: any) => {
|
|
|
310
309
|
</OSTable>
|
|
311
310
|
)}
|
|
312
311
|
{
|
|
313
|
-
cart?.offers?.length > 0 && cart?.offers?.filter((offer: any) => offer?.target === 2)?.map((offer: any) => (
|
|
314
|
-
<OSTable key={offer
|
|
312
|
+
cart?.offers?.length > 0 && cart?.offers?.filter((offer: any) => offer?.target === 2)?.map((offer: any, i: number) => (
|
|
313
|
+
<OSTable key={`${offer?.id}_${i}`}>
|
|
315
314
|
<OSRow>
|
|
316
315
|
<OText>{offer.name}</OText>
|
|
317
316
|
{offer.rate_type === 1 && (
|
|
@@ -62,6 +62,10 @@ const CartBottomSheetUI = (props: CartBottomSheetUIProps): React.ReactElement |
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
const handleEditProduct = (product: any) => {
|
|
65
|
+
if (props.onEditProduct) {
|
|
66
|
+
props.onEditProduct(product)
|
|
67
|
+
return
|
|
68
|
+
}
|
|
65
69
|
setCurProduct(product)
|
|
66
70
|
setModalIsOpen(true)
|
|
67
71
|
}
|
|
@@ -148,7 +152,7 @@ const CartBottomSheetUI = (props: CartBottomSheetUIProps): React.ReactElement |
|
|
|
148
152
|
<StyledBottomContent
|
|
149
153
|
style={{bottom:10}}
|
|
150
154
|
minHeight={props.height * 0.01}
|
|
151
|
-
>
|
|
155
|
+
>
|
|
152
156
|
<OButton
|
|
153
157
|
text={(cart?.subtotal >= cart?.minimum || !cart?.minimum) && cart?.valid_address ? (
|
|
154
158
|
!openUpselling !== canOpenUpselling ? `${t('CHECKOUT', 'Checkout')} ${parsePrice(cart?.total)}`: t('LOADING', 'Loading')
|
|
@@ -198,6 +202,7 @@ const CartBottomSheetUI = (props: CartBottomSheetUIProps): React.ReactElement |
|
|
|
198
202
|
canOpenUpselling={canOpenUpselling}
|
|
199
203
|
setCanOpenUpselling={setCanOpenUpselling}
|
|
200
204
|
onClose={onCloseUpselling}
|
|
205
|
+
onAddProduct={props.onAddProduct}
|
|
201
206
|
resetInactivityTimeout={resetInactivityTimeout}
|
|
202
207
|
/>
|
|
203
208
|
)}
|
|
@@ -231,7 +236,7 @@ const TopBar = (props:any) => {
|
|
|
231
236
|
<OIconButton
|
|
232
237
|
bgColor="transparent"
|
|
233
238
|
borderColor="transparent"
|
|
234
|
-
RenderIcon={() =>
|
|
239
|
+
RenderIcon={() =>
|
|
235
240
|
<EvilIcons
|
|
236
241
|
name={'close'}
|
|
237
242
|
size={40}
|
|
@@ -260,6 +265,8 @@ interface CartBottomSheetUIProps {
|
|
|
260
265
|
onNavigationRedirect: any,
|
|
261
266
|
clearInactivityTimeout: any,
|
|
262
267
|
resetInactivityTimeout: any,
|
|
268
|
+
onEditProduct: any,
|
|
269
|
+
onAddProduct: any,
|
|
263
270
|
}
|
|
264
271
|
|
|
265
272
|
export const CartBottomSheet = (props: any) => {
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import React, { useEffect, useState } from 'react';
|
|
2
|
-
import { useLanguage } from 'ordering-components/native';
|
|
3
2
|
import { useCartBottomSheet } from '../../providers/CartBottomSheetProvider';
|
|
4
|
-
import { CCNotCarts } from './styles';
|
|
5
3
|
|
|
6
4
|
import { Cart } from '../Cart';
|
|
7
|
-
import { OText } from '../shared';
|
|
8
5
|
import Spinner from 'react-native-loading-spinner-overlay';
|
|
9
6
|
import { Cart as TypeCart } from '../../types';
|
|
10
7
|
|
|
@@ -20,7 +17,6 @@ export const CartContent = (props: any) => {
|
|
|
20
17
|
resetInactivityTimeout,
|
|
21
18
|
}: Props = props
|
|
22
19
|
|
|
23
|
-
const [, t] = useLanguage()
|
|
24
20
|
const [isCartsLoading, setIsCartsLoading] = useState(false)
|
|
25
21
|
const [, { hideCartBottomSheet }] = useCartBottomSheet();
|
|
26
22
|
|
|
@@ -56,13 +52,6 @@ export const CartContent = (props: any) => {
|
|
|
56
52
|
}
|
|
57
53
|
</>
|
|
58
54
|
)}
|
|
59
|
-
{/* {(!cart && showNotFound) && (
|
|
60
|
-
<CCNotCarts>
|
|
61
|
-
<OText size={24} style={{ textAlign: 'center' }}>
|
|
62
|
-
{t('CARTS_NOT_FOUND', 'You don\'t have carts available')}
|
|
63
|
-
</OText>
|
|
64
|
-
</CCNotCarts>
|
|
65
|
-
)} */}
|
|
66
55
|
<Spinner visible={isCartsLoading} />
|
|
67
56
|
</>
|
|
68
57
|
)
|
|
@@ -56,9 +56,10 @@ const CartItem = (props: CartItemProps) => {
|
|
|
56
56
|
return product
|
|
57
57
|
}
|
|
58
58
|
const isProductIngredients = productInfo()?.ingredients.length > 0 || productInfo()?.options.length > 0 || product?.comment
|
|
59
|
-
const getFormattedSubOptionName = ({ quantity, name, position, price }: { quantity: number, name: string, position: string, price:
|
|
59
|
+
const getFormattedSubOptionName = ({ quantity, name, position, price }: { quantity: number, name: string, position: string, price: any }) => {
|
|
60
60
|
const pos = position ? `(${position})` : ''
|
|
61
|
-
|
|
61
|
+
const str = `${quantity} x ${name} ${pos}`
|
|
62
|
+
return price ? `${str} ${price}` : str
|
|
62
63
|
}
|
|
63
64
|
|
|
64
65
|
return (
|
|
@@ -184,7 +185,7 @@ const CartItem = (props: CartItemProps) => {
|
|
|
184
185
|
quantity: suboption.quantity,
|
|
185
186
|
name: suboption.name,
|
|
186
187
|
position: (suboption.position !== 'whole') ? t(suboption.position.toUpperCase(), suboption.position) : '',
|
|
187
|
-
price: parsePrice(suboption.price)
|
|
188
|
+
price: suboption.price > 0 && `+${parsePrice(suboption.price)}`
|
|
188
189
|
})}
|
|
189
190
|
</OText>
|
|
190
191
|
</ProductSubOption>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, {
|
|
1
|
+
import React, { useCallback, useState } from 'react';
|
|
2
2
|
import { Dimensions, Platform, View } from 'react-native';
|
|
3
3
|
import { useLanguage, useOrder, useUtils } from 'ordering-components/native';
|
|
4
4
|
import MaterialIcon from 'react-native-vector-icons/MaterialCommunityIcons'
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
OText
|
|
13
13
|
} from '../../components/shared';
|
|
14
14
|
import { CartBottomSheet } from '../../components/CartBottomSheet';
|
|
15
|
+
import { NotFoundSource } from '../NotFoundSource';
|
|
15
16
|
import { Category } from '../../types';
|
|
16
17
|
import { CartContent } from '../../components/CartContent';
|
|
17
18
|
import { TouchableOpacity } from 'react-native-gesture-handler';
|
|
@@ -40,20 +41,22 @@ const CategoriesMenu = (props: any): React.ReactElement => {
|
|
|
40
41
|
|
|
41
42
|
const theme = useTheme()
|
|
42
43
|
const [, t] = useLanguage();
|
|
43
|
-
const [curIndexCateg, setIndexCateg] = useState(categories.indexOf(category));
|
|
44
44
|
const [{ parsePrice }] = useUtils();
|
|
45
45
|
const [orientationState] = useDeviceOrientation();
|
|
46
46
|
const [bottomSheetVisibility, { showCartBottomSheet, hideCartBottomSheet }] = useCartBottomSheet();
|
|
47
|
-
|
|
47
|
+
|
|
48
|
+
const [productState, setProductState] = useState<any>(null)
|
|
49
|
+
const [productSelected, setProductSelected] = useState<any>({})
|
|
50
|
+
const [curIndexCateg, setIndexCateg] = useState(categories.indexOf(category));
|
|
48
51
|
const [drawerState, setDrawerState] = useState({ isOpen: false, data: { order: null } });
|
|
49
52
|
|
|
50
53
|
const width_dimension = Dimensions.get('window').width;
|
|
51
54
|
const height_dimension = Dimensions.get('window').height;
|
|
52
|
-
|
|
55
|
+
|
|
53
56
|
const KeyboardView = styled.KeyboardAvoidingView`
|
|
54
57
|
flex: 1;
|
|
55
58
|
`;
|
|
56
|
-
|
|
59
|
+
|
|
57
60
|
const onChangeTabs = (idx: number) => {
|
|
58
61
|
resetInactivityTimeout();
|
|
59
62
|
setIndexCateg(idx);
|
|
@@ -75,6 +78,16 @@ const CategoriesMenu = (props: any): React.ReactElement => {
|
|
|
75
78
|
cart = cartsList?.find((item: any) => item.business_id == businessId);
|
|
76
79
|
}
|
|
77
80
|
|
|
81
|
+
const onEditProduct = (product: any) => {
|
|
82
|
+
setProductSelected({ ...product, _isEditProduct: true })
|
|
83
|
+
setDrawerValues({ isOpen: true, data: null })
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const onAddProduct = (product: any) => {
|
|
87
|
+
setProductSelected(product)
|
|
88
|
+
setDrawerValues({ isOpen: true, data: null })
|
|
89
|
+
}
|
|
90
|
+
|
|
78
91
|
const cartProps = {
|
|
79
92
|
...props,
|
|
80
93
|
cart,
|
|
@@ -87,16 +100,32 @@ const CategoriesMenu = (props: any): React.ReactElement => {
|
|
|
87
100
|
visible: bottomSheetVisibility,
|
|
88
101
|
clearInactivityTimeout,
|
|
89
102
|
resetInactivityTimeout,
|
|
103
|
+
onEditProduct,
|
|
104
|
+
onAddProduct
|
|
90
105
|
},
|
|
91
106
|
showNotFound: false,
|
|
92
107
|
showCartBottomSheet,
|
|
93
108
|
}
|
|
94
109
|
|
|
110
|
+
const onClickDrawer = () => {
|
|
111
|
+
setDrawerValues({ isOpen: !drawerState.isOpen, data: null })
|
|
112
|
+
setProductState(null)
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const onSaveProductForm = () => {
|
|
116
|
+
showCartBottomSheet()
|
|
117
|
+
onClickDrawer()
|
|
118
|
+
}
|
|
119
|
+
|
|
95
120
|
const onToggleCart = () => {
|
|
96
121
|
if (bottomSheetVisibility) hideCartBottomSheet();
|
|
97
122
|
else showCartBottomSheet();
|
|
98
123
|
}
|
|
99
124
|
|
|
125
|
+
const onProductStateChange = useCallback((val: any) => {
|
|
126
|
+
setProductState({ ...productState, ...val })
|
|
127
|
+
}, [setProductState])
|
|
128
|
+
|
|
100
129
|
return (
|
|
101
130
|
<>
|
|
102
131
|
<View style={{
|
|
@@ -112,44 +141,46 @@ const CategoriesMenu = (props: any): React.ReactElement => {
|
|
|
112
141
|
}}
|
|
113
142
|
>
|
|
114
143
|
<Container nopadding nestedScrollEnabled>
|
|
115
|
-
<View style={{ paddingTop: 20 }}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
144
|
+
{Platform.OS === 'android' && (<View style={{ paddingTop: 20 }} />)}
|
|
145
|
+
<NavBar
|
|
146
|
+
title={categories[curIndexCateg].name}
|
|
147
|
+
onActionLeft={goToBack}
|
|
148
|
+
rightComponent={cart && (
|
|
149
|
+
<TouchableOpacity
|
|
150
|
+
style={{ paddingHorizontal: 20, flexDirection: 'row', alignItems: 'center' }}
|
|
151
|
+
onPress={onToggleCart}
|
|
152
|
+
>
|
|
153
|
+
<OText
|
|
154
|
+
color={theme.colors.mediumGray}
|
|
123
155
|
>
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
<GridContainer
|
|
148
|
-
style={{
|
|
149
|
-
marginTop: 20,
|
|
156
|
+
{`${cart?.products?.length || 0} ${t('ITEMS', 'items')}`} {parsePrice(cart?.total || 0)} {' '}
|
|
157
|
+
</OText>
|
|
158
|
+
|
|
159
|
+
<MaterialIcon
|
|
160
|
+
name={bottomSheetVisibility ? "cart-off" : "cart-outline"}
|
|
161
|
+
color={theme.colors.primary}
|
|
162
|
+
size={30}
|
|
163
|
+
/>
|
|
164
|
+
</TouchableOpacity>
|
|
165
|
+
)}
|
|
166
|
+
/>
|
|
167
|
+
|
|
168
|
+
<OSegment
|
|
169
|
+
items={categories.map((category) => ({
|
|
170
|
+
text: category.name
|
|
171
|
+
}))}
|
|
172
|
+
selectedIdx={curIndexCateg}
|
|
173
|
+
onSelectItem={onChangeTabs}
|
|
174
|
+
/>
|
|
175
|
+
|
|
176
|
+
<GridContainer
|
|
177
|
+
style={{
|
|
178
|
+
marginTop: 20,
|
|
150
179
|
paddingLeft: orientationState?.orientation === LANDSCAPE
|
|
151
|
-
|
|
152
|
-
|
|
180
|
+
? bottomSheetVisibility
|
|
181
|
+
? orientationState?.dimensions?.width * 0.004
|
|
182
|
+
: orientationState?.dimensions?.width * 0.008
|
|
183
|
+
: 0
|
|
153
184
|
}}
|
|
154
185
|
>
|
|
155
186
|
{categories[curIndexCateg].products.map((product) => (
|
|
@@ -170,8 +201,7 @@ const CategoriesMenu = (props: any): React.ReactElement => {
|
|
|
170
201
|
onPress={() => {
|
|
171
202
|
resetInactivityTimeout()
|
|
172
203
|
if (isDrawer) {
|
|
173
|
-
|
|
174
|
-
setDrawerValues({ isOpen: true, data: null })
|
|
204
|
+
onAddProduct && onAddProduct(product)
|
|
175
205
|
} else {
|
|
176
206
|
navigation.navigate('ProductDetails', {
|
|
177
207
|
businessId,
|
|
@@ -182,26 +212,31 @@ const CategoriesMenu = (props: any): React.ReactElement => {
|
|
|
182
212
|
}}
|
|
183
213
|
/>
|
|
184
214
|
))}
|
|
215
|
+
|
|
216
|
+
{categories[curIndexCateg].products.length === 0 && (
|
|
217
|
+
<NotFoundSource
|
|
218
|
+
content={t('ERROR_NOT_FOUND_PRODUCTS_TIME', 'No products found at this time')}
|
|
219
|
+
/>
|
|
220
|
+
)}
|
|
185
221
|
</GridContainer>
|
|
186
222
|
</Container>
|
|
187
223
|
</View>
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
</View>
|
|
224
|
+
<View
|
|
225
|
+
style={{
|
|
226
|
+
flex: bottomSheetVisibility && orientationState?.orientation === PORTRAIT ? 0 : 0.8,
|
|
227
|
+
display: bottomSheetVisibility ? 'flex' : 'none'
|
|
228
|
+
}}
|
|
229
|
+
>
|
|
230
|
+
<CartContent
|
|
231
|
+
{...cartProps}
|
|
232
|
+
/>
|
|
233
|
+
</View>
|
|
199
234
|
</View>
|
|
200
235
|
<DrawerView
|
|
201
236
|
isOpen={drawerState.isOpen}
|
|
202
237
|
width={width_dimension - (width_dimension * 0.4)}
|
|
203
238
|
height={height_dimension}
|
|
204
|
-
onClickIcon={
|
|
239
|
+
onClickIcon={onClickDrawer}
|
|
205
240
|
>
|
|
206
241
|
<KeyboardView
|
|
207
242
|
enabled
|
|
@@ -209,14 +244,24 @@ const CategoriesMenu = (props: any): React.ReactElement => {
|
|
|
209
244
|
>
|
|
210
245
|
<ProductForm
|
|
211
246
|
isDrawer
|
|
212
|
-
product={productSelected}
|
|
213
|
-
businessId={parseInt(businessId, 10)}
|
|
214
|
-
businessSlug={businessSlug}
|
|
215
|
-
onSave={() => {
|
|
216
|
-
showCartBottomSheet()
|
|
217
|
-
setDrawerValues({ isOpen: !drawerState.isOpen, data: null })
|
|
218
|
-
}}
|
|
219
247
|
navigation={navigation}
|
|
248
|
+
{...(productSelected?._isEditProduct ? {
|
|
249
|
+
isEdit: true,
|
|
250
|
+
productCart: productState?.productCart ?? productSelected,
|
|
251
|
+
product: productState?.product,
|
|
252
|
+
businessSlug: cart?.business?.slug,
|
|
253
|
+
businessId: cart?.business_id,
|
|
254
|
+
categoryId: productSelected?.category_id,
|
|
255
|
+
productId: productSelected?.id,
|
|
256
|
+
} : {
|
|
257
|
+
product: productSelected,
|
|
258
|
+
businessSlug: businessSlug,
|
|
259
|
+
businessId: parseInt(businessId, 10),
|
|
260
|
+
productState: productState,
|
|
261
|
+
productCart: productState,
|
|
262
|
+
})}
|
|
263
|
+
onSave={onSaveProductForm}
|
|
264
|
+
onProductStateChange={onProductStateChange}
|
|
220
265
|
/>
|
|
221
266
|
</KeyboardView>
|
|
222
267
|
</DrawerView>
|
|
@@ -50,6 +50,12 @@ const CheckoutUI = (props: any) => {
|
|
|
50
50
|
}
|
|
51
51
|
}, [cart])
|
|
52
52
|
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
if (!cartState.loading && cart && !cart?.valid && cart?.status === 2) {
|
|
55
|
+
navigation?.canGoBack() && navigation.goBack()
|
|
56
|
+
}
|
|
57
|
+
}, [cart])
|
|
58
|
+
|
|
53
59
|
return (
|
|
54
60
|
<>
|
|
55
61
|
<PaymentOptions
|
|
@@ -19,12 +19,12 @@ export const WrapperFloatBtn = styled.View`
|
|
|
19
19
|
top: 10%;
|
|
20
20
|
right: ${(props: any) => props.outside ? 11 : 58}%;
|
|
21
21
|
z-index: 20002;
|
|
22
|
-
elevation:
|
|
22
|
+
elevation: 17;
|
|
23
23
|
`;
|
|
24
24
|
|
|
25
25
|
export const IconControl = styled.TouchableOpacity`
|
|
26
26
|
background-color: ${(props: any) => props.theme.colors.white};
|
|
27
27
|
padding: 10px;
|
|
28
28
|
border-radius: 8px;
|
|
29
|
-
elevation:
|
|
29
|
+
elevation: 17;
|
|
30
30
|
`;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import * as React from 'react'
|
|
2
2
|
import styled from 'styled-components/native'
|
|
3
3
|
import { OIcon, OButton, OText } from '../shared'
|
|
4
|
-
import { ImageStyle, TextStyle, View, Platform } from 'react-native'
|
|
5
|
-
import {
|
|
6
|
-
import { useConfig, useLanguage } from 'ordering-components/native'
|
|
4
|
+
import { ImageStyle, TextStyle, View, Platform, TouchableOpacity } from 'react-native'
|
|
5
|
+
import { useConfig, useLanguage, useOrder } from 'ordering-components/native'
|
|
7
6
|
import { useTheme } from 'styled-components/native'
|
|
8
7
|
|
|
9
8
|
const Wrapper = styled.View`
|
|
@@ -55,13 +54,15 @@ interface Props {
|
|
|
55
54
|
paddingTop?: number,
|
|
56
55
|
includeOrderTypeSelector?: boolean,
|
|
57
56
|
imgLeftStyle?: ImageStyle
|
|
57
|
+
onClickTypes?: any
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
const NavBar = (props: Props) => {
|
|
61
61
|
const theme = useTheme();
|
|
62
|
-
const [
|
|
62
|
+
const [orderState] = useOrder()
|
|
63
63
|
const [, t] = useLanguage();
|
|
64
|
-
|
|
64
|
+
|
|
65
|
+
const selectedOrderType = orderState?.options?.type;
|
|
65
66
|
|
|
66
67
|
return (
|
|
67
68
|
<Wrapper style={{ paddingTop: props.paddingTop, ...props.style }}>
|
|
@@ -121,7 +122,15 @@ const NavBar = (props: Props) => {
|
|
|
121
122
|
}}
|
|
122
123
|
>
|
|
123
124
|
<OText style={{ paddingRight: 5 }}>{t('THIS_ORDER_IS_TO', 'This order is to')}</OText>
|
|
124
|
-
<
|
|
125
|
+
<TouchableOpacity
|
|
126
|
+
activeOpacity={1}
|
|
127
|
+
onPress={props.onClickTypes}
|
|
128
|
+
>
|
|
129
|
+
<OText color={theme.colors.primary}>
|
|
130
|
+
{selectedOrderType === 2 && t('TAKE_OUT', 'Take out')}
|
|
131
|
+
{selectedOrderType === 3 && t('EAT_IN', 'Eat in')}
|
|
132
|
+
</OText>
|
|
133
|
+
</TouchableOpacity>
|
|
125
134
|
</View>
|
|
126
135
|
)}
|
|
127
136
|
|
|
@@ -57,8 +57,8 @@ const OrderTypeSelectorCardUI = (props: OrderTypeSelectParams) => {
|
|
|
57
57
|
<Container>
|
|
58
58
|
<NavBar
|
|
59
59
|
title={t('ORDER_TYPE_X_ID', 'Order type')}
|
|
60
|
-
{
|
|
61
|
-
btnStyle={{paddingLeft: 0}}
|
|
60
|
+
onActionLeft={goBack}
|
|
61
|
+
btnStyle={{ paddingLeft: 0 }}
|
|
62
62
|
/>
|
|
63
63
|
|
|
64
64
|
<View style={{ marginVertical: orientationState?.dimensions?.height * 0.03 }}>
|
|
@@ -189,67 +189,69 @@ const PaymentOptionsUI = (props: any) => {
|
|
|
189
189
|
|
|
190
190
|
return (
|
|
191
191
|
<>
|
|
192
|
-
<Spinner visible={isLoading || placing} />
|
|
192
|
+
<Spinner visible={isLoading || placing || paymethodsList?.loading} />
|
|
193
193
|
|
|
194
194
|
<Container nestedScrollEnabled>
|
|
195
|
-
<NavBar
|
|
196
|
-
title={t('PAYMENT_METHODS', 'Payment methods')}
|
|
197
|
-
onActionLeft={goToBack}
|
|
198
|
-
btnStyle={{ paddingLeft: 0 }}
|
|
199
|
-
/>
|
|
200
|
-
|
|
201
|
-
<View
|
|
202
|
-
style={{ marginVertical: orientationState?.dimensions?.height * 0.03 }}>
|
|
203
|
-
<OText size={orientationState?.dimensions?.width * 0.048}>
|
|
204
|
-
{t('HOW_WOULD_YOU', 'How would you')} {'\n'}
|
|
205
|
-
<OText
|
|
206
|
-
size={orientationState?.dimensions?.width * 0.048}
|
|
207
|
-
weight={'700'}>
|
|
208
|
-
{`${t('LIKE_TO_PAY', 'like to pay')}?`}
|
|
209
|
-
</OText>
|
|
210
|
-
</OText>
|
|
211
|
-
</View>
|
|
212
|
-
|
|
213
195
|
{supportedMethods?.length > 0 && (
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
196
|
+
<>
|
|
197
|
+
<NavBar
|
|
198
|
+
title={t('PAYMENT_METHODS', 'Payment methods')}
|
|
199
|
+
onActionLeft={goToBack}
|
|
200
|
+
btnStyle={{ paddingLeft: 0 }}
|
|
201
|
+
/>
|
|
220
202
|
|
|
221
203
|
<View
|
|
222
|
-
style={{
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
/>
|
|
204
|
+
style={{ marginVertical: orientationState?.dimensions?.height * 0.03 }}>
|
|
205
|
+
<OText size={orientationState?.dimensions?.width * 0.048}>
|
|
206
|
+
{t('HOW_WOULD_YOU', 'How would you')} {'\n'}
|
|
207
|
+
<OText
|
|
208
|
+
size={orientationState?.dimensions?.width * 0.048}
|
|
209
|
+
weight={'700'}>
|
|
210
|
+
{`${t('LIKE_TO_PAY', 'like to pay')}?`}
|
|
211
|
+
</OText>
|
|
212
|
+
</OText>
|
|
213
|
+
</View>
|
|
233
214
|
|
|
234
|
-
{
|
|
215
|
+
<GridContainer style={{ justifyContent: 'space-between' }}>
|
|
216
|
+
{propsOfItems.CARD_ON_DELIVERY_ID && (
|
|
217
|
+
<View style={{ marginBottom: orientationState?.orientation === LANDSCAPE ? 20 : 0 }}>
|
|
218
|
+
<OptionCard {...propsOfItems?.CARD_ON_DELIVERY_ID} styke />
|
|
219
|
+
</View>
|
|
220
|
+
)}
|
|
235
221
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
222
|
+
<View
|
|
223
|
+
style={{
|
|
224
|
+
width:
|
|
225
|
+
orientationState?.orientation === LANDSCAPE
|
|
226
|
+
? orientationState?.dimensions?.width * 0.0016
|
|
227
|
+
: 1,
|
|
228
|
+
height:
|
|
229
|
+
orientationState?.orientation === PORTRAIT
|
|
230
|
+
? orientationState?.dimensions?.height * 0.018
|
|
231
|
+
: 1,
|
|
232
|
+
}}
|
|
233
|
+
/>
|
|
234
|
+
|
|
235
|
+
{propsOfItems?.CASH_ID && <OptionCard {...propsOfItems?.CASH_ID} />}
|
|
236
|
+
|
|
237
|
+
<View
|
|
238
|
+
style={{
|
|
239
|
+
width:
|
|
240
|
+
orientationState?.orientation === LANDSCAPE
|
|
241
|
+
? orientationState?.dimensions?.width * 0.0016
|
|
242
|
+
: 1,
|
|
243
|
+
height:
|
|
244
|
+
orientationState?.orientation === PORTRAIT
|
|
245
|
+
? orientationState?.dimensions?.height * 0.018
|
|
246
|
+
: 1,
|
|
247
|
+
}}
|
|
248
|
+
/>
|
|
248
249
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
250
|
+
{propsOfItems.STRIPE && (
|
|
251
|
+
<OptionCard {...propsOfItems?.STRIPE} />
|
|
252
|
+
)}
|
|
253
|
+
</GridContainer>
|
|
254
|
+
</>
|
|
253
255
|
)}
|
|
254
256
|
<View style={{ height: orientationState?.dimensions?.height * 0.05 }} />
|
|
255
257
|
<OModal
|
|
@@ -6,8 +6,7 @@ import {
|
|
|
6
6
|
StyleSheet,
|
|
7
7
|
Animated,
|
|
8
8
|
ScrollView,
|
|
9
|
-
|
|
10
|
-
ImageBackground
|
|
9
|
+
ImageBackground,
|
|
11
10
|
} from 'react-native'
|
|
12
11
|
import {
|
|
13
12
|
ProductForm as ProductOptions,
|
|
@@ -17,7 +16,6 @@ import {
|
|
|
17
16
|
useUtils
|
|
18
17
|
} from 'ordering-components/native'
|
|
19
18
|
import MaterialCommunityIcon from 'react-native-vector-icons/MaterialCommunityIcons'
|
|
20
|
-
import Spinner from 'react-native-loading-spinner-overlay'
|
|
21
19
|
import { useTheme } from 'styled-components/native'
|
|
22
20
|
|
|
23
21
|
import { ProductIngredient } from '../ProductIngredient'
|
|
@@ -32,12 +30,11 @@ import {
|
|
|
32
30
|
ProductComment,
|
|
33
31
|
ProductActions
|
|
34
32
|
} from './styles'
|
|
35
|
-
import { OButton,
|
|
33
|
+
import { OButton, OInput, OText } from '../shared'
|
|
36
34
|
import { ProductOptionSubOption } from '../ProductOptionSubOption'
|
|
37
35
|
import { NotFoundSource } from '../NotFoundSource'
|
|
38
36
|
import NavBar from '../NavBar'
|
|
39
37
|
import { useDeviceOrientation } from '../../../../../src/hooks/DeviceOrientation'
|
|
40
|
-
import { useCartBottomSheet } from '../../providers/CartBottomSheetProvider';
|
|
41
38
|
|
|
42
39
|
export const ProductOptionsUI = (props: any) => {
|
|
43
40
|
const {
|
|
@@ -56,7 +53,6 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
56
53
|
handleChangeCommentState,
|
|
57
54
|
productObject,
|
|
58
55
|
onClose,
|
|
59
|
-
isFromCheckout,
|
|
60
56
|
isDrawer
|
|
61
57
|
} = props;
|
|
62
58
|
|
|
@@ -66,7 +62,6 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
66
62
|
const [orderState] = useOrder();
|
|
67
63
|
const [{ auth }] = useSession();
|
|
68
64
|
const [orientationState] = useDeviceOrientation();
|
|
69
|
-
const [, { showCartBottomSheet }] = useCartBottomSheet();
|
|
70
65
|
|
|
71
66
|
const { product, loading, error } = productObject;
|
|
72
67
|
|
|
@@ -87,6 +82,8 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
87
82
|
const handleSaveProduct = () => {
|
|
88
83
|
const isErrors = Object.values(errors).length > 0
|
|
89
84
|
if (!isErrors) {
|
|
85
|
+
props.onProductStateChange &&
|
|
86
|
+
props.onProductStateChange(props.isEdit ? { product, productCart }: productCart)
|
|
90
87
|
handleSave && handleSave()
|
|
91
88
|
return
|
|
92
89
|
}
|
|
@@ -503,12 +500,14 @@ export const ProductOptionsUI = (props: any) => {
|
|
|
503
500
|
</WrapContent>
|
|
504
501
|
</View>
|
|
505
502
|
)}
|
|
503
|
+
|
|
506
504
|
{error && error.length > 0 && (
|
|
507
505
|
<NotFoundSource
|
|
508
506
|
content={error[0]?.message || error[0]}
|
|
509
507
|
/>
|
|
510
508
|
)}
|
|
511
509
|
</ScrollView>
|
|
510
|
+
|
|
512
511
|
{!loading && !error && product && (
|
|
513
512
|
<ProductActions>
|
|
514
513
|
{productCart && !isSoldOut && maxProductQuantity > 0 && (
|
|
@@ -103,7 +103,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
|
|
|
103
103
|
|
|
104
104
|
const getFormattedSubOptionName = ({ quantity, name, position, price }: { quantity: number, name: string, position: string, price: number }) => {
|
|
105
105
|
const pos = position ? `(${position})` : ''
|
|
106
|
-
return `${quantity} x ${name} ${pos}
|
|
106
|
+
return `${quantity} x ${name} ${pos} ${price}`
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
/*useEffect(() => {
|
|
@@ -210,7 +210,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
|
|
|
210
210
|
quantity: suboption.quantity,
|
|
211
211
|
name: suboption.name,
|
|
212
212
|
position: (suboption.position !== 'whole') ? t(suboption.position.toUpperCase(), suboption.position) : '',
|
|
213
|
-
price: parsePrice(suboption.price)
|
|
213
|
+
price: suboption.price > 0 ? `+${parsePrice(suboption.price)}` : parsePrice(suboption.price)
|
|
214
214
|
})}
|
|
215
215
|
</OText>
|
|
216
216
|
</ProductSubOption>
|
|
@@ -144,13 +144,15 @@ export const ProductOptionSubOptionUI = (props: any) => {
|
|
|
144
144
|
</PositionControl>
|
|
145
145
|
)
|
|
146
146
|
}
|
|
147
|
+
{price > 0 && (
|
|
147
148
|
<OText
|
|
148
149
|
color="#909BA9"
|
|
149
150
|
size={16}
|
|
150
151
|
weight="bold"
|
|
151
152
|
>
|
|
152
|
-
|
|
153
|
+
+ {parsePrice(price)}
|
|
153
154
|
</OText>
|
|
155
|
+
)}
|
|
154
156
|
</RightSide>
|
|
155
157
|
</Container>
|
|
156
158
|
)
|
|
@@ -71,6 +71,11 @@ const UpsellingProductsUI = (props: UpsellingProductsParams) => {
|
|
|
71
71
|
}, [upsellingProducts.loading, upsellingProducts?.products.length])
|
|
72
72
|
|
|
73
73
|
const handleFormProduct = (product: any) => {
|
|
74
|
+
if (props.onAddProduct) {
|
|
75
|
+
onClose && onClose()
|
|
76
|
+
props.onAddProduct(product)
|
|
77
|
+
return
|
|
78
|
+
}
|
|
74
79
|
setActualProduct(product)
|
|
75
80
|
setModalIsOpen(true)
|
|
76
81
|
}
|
|
@@ -81,9 +86,18 @@ const UpsellingProductsUI = (props: UpsellingProductsParams) => {
|
|
|
81
86
|
}
|
|
82
87
|
|
|
83
88
|
const UpsellingLayout = () => {
|
|
84
|
-
|
|
85
89
|
const theme = useTheme()
|
|
86
90
|
|
|
91
|
+
const onClickProduct = (product: any) => {
|
|
92
|
+
resetInactivityTimeout()
|
|
93
|
+
if (props.onAddProduct) {
|
|
94
|
+
onClose && onClose()
|
|
95
|
+
props.onAddProduct(product)
|
|
96
|
+
return
|
|
97
|
+
}
|
|
98
|
+
handleFormProduct(product)
|
|
99
|
+
}
|
|
100
|
+
|
|
87
101
|
return (
|
|
88
102
|
<Container>
|
|
89
103
|
{
|
|
@@ -167,10 +181,7 @@ const UpsellingProductsUI = (props: UpsellingProductsParams) => {
|
|
|
167
181
|
style={{ height: 40, width: '100%' }}
|
|
168
182
|
bgColor="#EAF2FE"
|
|
169
183
|
borderColor="#EAF2FE"
|
|
170
|
-
onClick={() =>
|
|
171
|
-
resetInactivityTimeout()
|
|
172
|
-
handleFormProduct(product)
|
|
173
|
-
}}
|
|
184
|
+
onClick={() => onClickProduct(product)}
|
|
174
185
|
/>
|
|
175
186
|
</Item>
|
|
176
187
|
)) : (
|
|
@@ -417,14 +417,17 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
417
417
|
];
|
|
418
418
|
const driverLocationString = typeof order?.driver?.location?.location === 'string' && order?.driver?.location?.location?.split(',').map((l: string) => l.replace(/[^-.0-9]/g, ''))
|
|
419
419
|
const parsedLocations = locations.map(location => typeof location?.location === 'string' ? {
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
420
|
+
...location,
|
|
421
|
+
lat: parseFloat(location?.location?.split(',')[0].replace(/[^-.0-9]/g, '')),
|
|
422
|
+
lng: parseFloat(location?.location?.split(',')[1].replace(/[^-.0-9]/g, ''))
|
|
423
|
+
} : location)
|
|
424
424
|
|
|
425
425
|
useEffect(() => {
|
|
426
426
|
if (driverLocation) {
|
|
427
|
-
|
|
427
|
+
parsedLocations[0] = {
|
|
428
|
+
...locations[0],
|
|
429
|
+
...driverLocation
|
|
430
|
+
}
|
|
428
431
|
}
|
|
429
432
|
}, [driverLocation]);
|
|
430
433
|
|
|
@@ -696,7 +699,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
696
699
|
<Map>
|
|
697
700
|
<GoogleMap
|
|
698
701
|
location={typeof order?.driver?.location?.location === 'string'
|
|
699
|
-
|
|
702
|
+
? {
|
|
700
703
|
lat: parseFloat(driverLocationString[0]),
|
|
701
704
|
lng: parseFloat(driverLocationString[1]),
|
|
702
705
|
} : driverLocation ?? order?.driver?.location
|
|
@@ -1027,7 +1030,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
1027
1030
|
)}
|
|
1028
1031
|
</View>
|
|
1029
1032
|
<OText>
|
|
1030
|
-
-{parsePrice(event.amount)}
|
|
1033
|
+
-{parsePrice(event.amount, { isTruncable: true })}
|
|
1031
1034
|
</OText>
|
|
1032
1035
|
</View>
|
|
1033
1036
|
))}
|