ordering-ui-react-native 0.15.18 → 0.15.20-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 -3
- package/src/DeliveryApp.tsx +43 -1
- package/src/components/BusinessTypeFilter/index.tsx +12 -2
- package/src/components/BusinessTypeFilter/styles.tsx +1 -1
- package/src/components/BusinessesListing/index.tsx +1 -1
- package/src/components/Checkout/index.tsx +0 -1
- package/src/components/LanguageSelector/index.tsx +1 -0
- package/src/components/OrderDetails/index.tsx +26 -5
- package/src/components/PaymentOptions/index.tsx +9 -16
- package/src/components/PaymentOptionsWebView/index.tsx +123 -124
- package/src/components/StripeElementsForm/index.tsx +27 -48
- package/src/components/VerifyPhone/styles.tsx +1 -2
- package/src/config.json +0 -2
- package/src/navigators/HomeNavigator.tsx +6 -0
- package/src/pages/BusinessProductsList.tsx +1 -0
- package/src/pages/BusinessesListing.tsx +1 -1
- package/src/pages/Checkout.tsx +1 -1
- package/src/pages/Sessions.tsx +22 -0
- package/src/types/index.tsx +1 -9
- package/src/utils/index.tsx +68 -1
- package/themes/business/index.tsx +2 -0
- package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +56 -8
- package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +5 -0
- package/themes/business/src/components/Chat/index.tsx +38 -86
- package/themes/business/src/components/Home/index.tsx +128 -55
- package/themes/business/src/components/Home/styles.tsx +8 -1
- package/themes/business/src/components/NewOrderNotification/index.tsx +59 -98
- package/themes/business/src/components/OrderDetails/Business.tsx +2 -1
- package/themes/business/src/components/OrderDetails/Delivery.tsx +22 -13
- package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +151 -89
- package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +91 -17
- package/themes/business/src/components/OrderDetails/styles.tsx +7 -0
- package/themes/business/src/components/OrdersListManager/index.tsx +874 -0
- package/themes/business/src/components/OrdersListManager/styles.tsx +123 -0
- package/themes/business/src/components/OrdersListManager/utils.tsx +216 -0
- package/themes/business/src/components/OrdersOption/index.tsx +54 -49
- package/themes/business/src/components/PreviousOrders/index.tsx +82 -23
- package/themes/business/src/types/index.tsx +2 -1
- 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/BusinessController/index.tsx +27 -6
- package/themes/kiosk/src/components/BusinessController/styles.tsx +1 -1
- package/themes/kiosk/src/components/BusinessProductsListing/index.tsx +48 -21
- package/themes/kiosk/src/components/Cart/index.tsx +98 -24
- package/themes/kiosk/src/components/Cart/styles.tsx +6 -0
- package/themes/kiosk/src/components/CartBottomSheet/index.tsx +1 -1
- package/themes/kiosk/src/components/CartBottomSheet/styles.tsx +1 -1
- package/themes/kiosk/src/components/CartContent/index.tsx +13 -3
- package/themes/kiosk/src/components/CartItem/index.tsx +20 -8
- package/themes/kiosk/src/components/CategoriesMenu/index.tsx +6 -5
- package/themes/kiosk/src/components/CustomerName/index.tsx +89 -88
- package/themes/kiosk/src/components/Intro/index.tsx +13 -13
- package/themes/kiosk/src/components/LanguageSelector/index.tsx +12 -8
- 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/OrderDetails/index.tsx +136 -41
- package/themes/kiosk/src/components/OrderDetails/styles.tsx +5 -0
- package/themes/kiosk/src/components/OrderSummary/index.tsx +1 -1
- package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +10 -12
- package/themes/kiosk/src/components/ProductForm/index.tsx +174 -125
- package/themes/kiosk/src/components/ProductForm/styles.tsx +1 -1
- package/themes/kiosk/src/components/ProductOption/index.tsx +1 -0
- package/themes/kiosk/src/components/ProductOption/styles.tsx +1 -0
- package/themes/kiosk/src/components/UpsellingProducts/index.tsx +48 -34
- package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
- package/themes/kiosk/src/components/shared/OCard.tsx +112 -78
- package/themes/kiosk/src/types/index.d.ts +2 -0
- package/themes/original/index.tsx +179 -0
- package/themes/original/src/components/AddressForm/index.tsx +15 -10
- package/themes/original/src/components/AddressList/index.tsx +56 -18
- package/themes/original/src/components/AppleLogin/index.tsx +117 -78
- package/themes/original/src/components/BusinessBasicInformation/index.tsx +96 -45
- package/themes/original/src/components/BusinessBasicInformation/styles.tsx +28 -1
- package/themes/original/src/components/BusinessController/index.tsx +52 -22
- package/themes/original/src/components/BusinessController/styles.tsx +22 -0
- package/themes/original/src/components/BusinessFeaturedController/index.tsx +20 -1
- package/themes/original/src/components/BusinessFeaturedController/styles.tsx +23 -0
- package/themes/original/src/components/BusinessListingSearch/index.tsx +4 -0
- package/themes/original/src/components/BusinessMenuList/index.tsx +11 -4
- package/themes/original/src/components/BusinessPreorder/index.tsx +141 -121
- package/themes/original/src/components/BusinessProductsCategories/index.tsx +7 -5
- package/themes/original/src/components/BusinessProductsList/index.tsx +130 -23
- package/themes/original/src/components/BusinessProductsList/styles.tsx +29 -2
- package/themes/original/src/components/BusinessProductsListing/index.tsx +92 -37
- package/themes/original/src/components/BusinessProductsListing/styles.tsx +22 -0
- package/themes/original/src/components/BusinessReviews/index.tsx +4 -25
- package/themes/original/src/components/BusinessTypeFilter/index.tsx +1 -2
- package/themes/original/src/components/BusinessesListing/index.tsx +48 -57
- package/themes/original/src/components/Cart/index.tsx +18 -14
- package/themes/original/src/components/CartContent/index.tsx +2 -2
- package/themes/original/src/components/Checkout/index.tsx +42 -27
- package/themes/original/src/components/CouponControl/index.tsx +1 -0
- package/themes/original/src/components/DriverTips/index.tsx +1 -1
- package/themes/original/src/components/ForgotPasswordForm/index.tsx +84 -4
- package/themes/original/src/components/Help/index.tsx +21 -4
- package/themes/original/src/components/HighestRatedBusinesses/index.tsx +97 -89
- package/themes/original/src/components/Home/index.tsx +1 -1
- package/themes/original/src/components/LastOrders/index.tsx +12 -1
- package/themes/original/src/components/LoginForm/index.tsx +73 -2
- package/themes/original/src/components/LoginForm/styles.tsx +6 -1
- package/themes/original/src/components/MessageListing/index.tsx +10 -1
- package/themes/original/src/components/Messages/index.tsx +50 -45
- package/themes/original/src/components/Messages/styles.tsx +1 -3
- package/themes/original/src/components/MomentOption/index.tsx +10 -1
- package/themes/original/src/components/MomentOption/styles.tsx +1 -1
- package/themes/original/src/components/OrderDetails/index.tsx +107 -111
- package/themes/original/src/components/OrderDetails/styles.tsx +3 -1
- package/themes/original/src/components/OrderProgress/index.tsx +4 -4
- package/themes/original/src/components/OrderProgress/styles.tsx +1 -0
- package/themes/original/src/components/OrderSummary/index.tsx +2 -2
- package/themes/original/src/components/OrderTypeSelector/index.tsx +4 -2
- package/themes/original/src/components/OrdersOption/index.tsx +25 -33
- package/themes/original/src/components/OrdersOption/styles.tsx +0 -6
- package/themes/original/src/components/PaymentOptionWallet/index.tsx +10 -4
- package/themes/original/src/components/PaymentOptionWallet/styles.tsx +1 -1
- package/themes/original/src/components/PaymentOptions/index.tsx +9 -19
- package/themes/original/src/components/PreviousOrders/index.tsx +19 -13
- package/themes/original/src/components/ProductForm/index.tsx +40 -33
- package/themes/original/src/components/ProductForm/styles.tsx +2 -2
- package/themes/original/src/components/ProductOptionSubOption/index.tsx +5 -3
- package/themes/original/src/components/Promotions/index.tsx +250 -0
- package/themes/original/src/components/Promotions/styles.tsx +60 -0
- package/themes/original/src/components/ReviewOrder/index.tsx +10 -9
- package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
- package/themes/original/src/components/Sessions/index.tsx +160 -0
- package/themes/original/src/components/Sessions/styles.tsx +15 -0
- package/themes/original/src/components/SingleProductCard/index.tsx +47 -21
- package/themes/original/src/components/SingleProductCard/styles.tsx +28 -1
- package/themes/original/src/components/StripeElementsForm/index.tsx +55 -72
- package/themes/original/src/components/TaxInformation/index.tsx +17 -7
- package/themes/original/src/components/UpsellingProducts/index.tsx +87 -71
- package/themes/original/src/components/UserDetails/index.tsx +4 -95
- package/themes/original/src/components/UserFormDetails/index.tsx +32 -31
- package/themes/original/src/components/UserProfile/index.tsx +70 -20
- package/themes/original/src/components/UserProfileForm/index.tsx +28 -24
- package/themes/original/src/components/VerifyPhone/index.tsx +10 -7
- package/themes/original/src/components/VerifyPhone/styles.tsx +2 -1
- package/themes/original/src/components/Wallets/index.tsx +75 -8
- package/themes/original/src/components/Wallets/styles.tsx +21 -0
- package/themes/original/src/components/shared/HeaderTitle.tsx +21 -0
- package/themes/original/src/components/shared/index.tsx +2 -0
- package/themes/original/src/config/constants.tsx +6 -6
- package/themes/original/src/types/index.tsx +71 -26
- package/themes/original/src/utils/index.tsx +12 -2
- package/themes/single-business/src/components/AddressList/index.tsx +1 -1
- package/themes/single-business/src/components/OrderTypeSelector/index.tsx +6 -6
- package/themes/single-business/src/components/UserProfile/index.tsx +1 -1
- package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
- package/src/components/StripeMethodForm/index.tsx +0 -168
|
@@ -1,18 +1,66 @@
|
|
|
1
|
-
import React, { useState } from 'react';
|
|
1
|
+
import React, { useState, useEffect } from 'react';
|
|
2
2
|
import { StyleSheet, View, Dimensions, Platform } from 'react-native';
|
|
3
|
-
import {
|
|
3
|
+
import { useForm, Controller } from 'react-hook-form';
|
|
4
|
+
import { useLanguage, useApi } from 'ordering-components/native';
|
|
4
5
|
import { useTheme } from 'styled-components/native';
|
|
5
|
-
import { LogoWrapper, Container, BackgroundImage } from './styles';
|
|
6
|
-
import { OButton, OIcon, OText } from '../shared';
|
|
6
|
+
import { LogoWrapper, Container, BackgroundImage, FormInput } from './styles';
|
|
7
|
+
import { OButton, OIcon, OText, OInput } from '../shared';
|
|
7
8
|
import { _setStoreData } from '../../providers/StoreUtil';
|
|
8
9
|
|
|
9
10
|
export const Home = (props: any) => {
|
|
10
|
-
const { onNavigationRedirect } = props;
|
|
11
|
+
const { onNavigationRedirect, useRootPoint } = props;
|
|
11
12
|
const safeHeight = Platform.OS === 'ios' ? 80 : 40;
|
|
12
13
|
|
|
13
14
|
const theme = useTheme();
|
|
15
|
+
const [ordering, { setOrdering }] = useApi();
|
|
14
16
|
const [, t] = useLanguage();
|
|
17
|
+
const { control, handleSubmit, errors } = useForm();
|
|
15
18
|
|
|
19
|
+
|
|
20
|
+
const styles = StyleSheet.create({
|
|
21
|
+
logo: {
|
|
22
|
+
height: 65,
|
|
23
|
+
width: 300,
|
|
24
|
+
},
|
|
25
|
+
wrapperContent: {
|
|
26
|
+
width: '100%',
|
|
27
|
+
},
|
|
28
|
+
wrapperText: {
|
|
29
|
+
marginBottom: 20,
|
|
30
|
+
},
|
|
31
|
+
textTitle: {
|
|
32
|
+
fontWeight: '600',
|
|
33
|
+
fontStyle: 'normal',
|
|
34
|
+
fontSize: 50,
|
|
35
|
+
},
|
|
36
|
+
textSubtitle: {
|
|
37
|
+
fontWeight: 'normal',
|
|
38
|
+
fontStyle: 'normal',
|
|
39
|
+
fontSize: 14,
|
|
40
|
+
},
|
|
41
|
+
wrapperBtn: {
|
|
42
|
+
marginBottom: 20
|
|
43
|
+
},
|
|
44
|
+
btn: {
|
|
45
|
+
borderRadius: 7.6,
|
|
46
|
+
marginTop: 20,
|
|
47
|
+
},
|
|
48
|
+
btnText: {
|
|
49
|
+
fontFamily: 'Poppins',
|
|
50
|
+
fontStyle: 'normal',
|
|
51
|
+
fontWeight: 'normal',
|
|
52
|
+
fontSize: 18,
|
|
53
|
+
},
|
|
54
|
+
input: {
|
|
55
|
+
borderWidth: 1,
|
|
56
|
+
borderRadius: 7.6,
|
|
57
|
+
borderColor: Object.keys(errors).length > 0 ? theme.colors.error : theme.colors.inputSignup,
|
|
58
|
+
backgroundColor: theme.colors.transparent,
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
const [projectName, setProjectName] = useState<any>(null)
|
|
63
|
+
const [isLoadingProject, setLoadingProject] = useState(false)
|
|
16
64
|
const [orientation, setOrientation] = useState(
|
|
17
65
|
Dimensions.get('window').width < Dimensions.get('window').height
|
|
18
66
|
? 'Portrait'
|
|
@@ -34,6 +82,27 @@ export const Home = (props: any) => {
|
|
|
34
82
|
}
|
|
35
83
|
});
|
|
36
84
|
|
|
85
|
+
const onSubmit = (values: any) => {
|
|
86
|
+
setLoadingProject(true)
|
|
87
|
+
setProjectName(values)
|
|
88
|
+
setOrdering({ ...ordering, project: values?.project_name })
|
|
89
|
+
_setStoreData('project_name', values?.project_name)
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
useEffect(() => {
|
|
93
|
+
if (Object.keys(errors).length > 0) {
|
|
94
|
+
setProjectName(null)
|
|
95
|
+
setLoadingProject(false)
|
|
96
|
+
}
|
|
97
|
+
}, [errors])
|
|
98
|
+
|
|
99
|
+
useEffect(() => {
|
|
100
|
+
if (ordering?.project === projectName?.project_name) {
|
|
101
|
+
setLoadingProject(false)
|
|
102
|
+
onNavigationRedirect('Login')
|
|
103
|
+
}
|
|
104
|
+
}, [ordering])
|
|
105
|
+
|
|
37
106
|
return (
|
|
38
107
|
<Container height={windowHeight - safeHeight} orientation={orientation}>
|
|
39
108
|
<BackgroundImage
|
|
@@ -54,58 +123,62 @@ export const Home = (props: any) => {
|
|
|
54
123
|
</OText>
|
|
55
124
|
</View>
|
|
56
125
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
126
|
+
<>
|
|
127
|
+
{useRootPoint && (
|
|
128
|
+
<FormInput>
|
|
129
|
+
<Controller
|
|
130
|
+
control={control}
|
|
131
|
+
name='project_name'
|
|
132
|
+
rules={{ required: t(`VALIDATION_ERROR_PROJECT_NAME_REQUIRED`, 'The field project name is required') }}
|
|
133
|
+
defaultValue=""
|
|
134
|
+
render={({ onChange, value }: any) => (
|
|
135
|
+
<OInput
|
|
136
|
+
name='project_name'
|
|
137
|
+
placeholderTextColor={theme.colors.arrowColor}
|
|
138
|
+
placeholder={t('PROJECT_NAME', 'Project Name')}
|
|
139
|
+
icon={theme.images.general.project}
|
|
140
|
+
iconColor={theme.colors.arrowColor}
|
|
141
|
+
onChange={(e: any) => onChange(e?.target?.value)}
|
|
142
|
+
selectionColor={theme.colors.primary}
|
|
143
|
+
color={theme.colors.white}
|
|
144
|
+
value={value}
|
|
145
|
+
style={styles.input}
|
|
146
|
+
returnKeyType='done'
|
|
147
|
+
autoCorrect={false}
|
|
148
|
+
autoCapitalize='none'
|
|
149
|
+
blurOnSubmit={false}
|
|
150
|
+
onSubmitEditing={() => handleSubmit(onSubmit)()}
|
|
151
|
+
/>
|
|
152
|
+
)}
|
|
153
|
+
/>
|
|
154
|
+
</FormInput>
|
|
155
|
+
)}
|
|
156
|
+
{Object.keys(errors).length > 0 && (
|
|
157
|
+
<OText
|
|
158
|
+
color={theme.colors.white}
|
|
159
|
+
style={{ alignSelf: 'center', marginTop: 5 }}
|
|
160
|
+
>
|
|
161
|
+
{errors['project_name'].message}
|
|
162
|
+
</OText>
|
|
163
|
+
)}
|
|
164
|
+
<View style={styles.wrapperBtn}>
|
|
165
|
+
<OButton
|
|
166
|
+
text={useRootPoint ? t('SET_PROJECT', 'Set project') : t('LOGIN', 'Login')}
|
|
167
|
+
textStyle={{
|
|
168
|
+
...styles.btnText,
|
|
169
|
+
color: theme.colors.inputTextColor,
|
|
170
|
+
}}
|
|
171
|
+
bgColor={theme.colors.primary}
|
|
172
|
+
borderColor={theme.colors.primary}
|
|
173
|
+
isLoading={isLoadingProject}
|
|
174
|
+
style={styles.btn}
|
|
175
|
+
imgRightSrc={false}
|
|
176
|
+
onClick={() => useRootPoint ? handleSubmit(onSubmit)() : onNavigationRedirect('Login')}
|
|
177
|
+
/>
|
|
178
|
+
</View>
|
|
179
|
+
</>
|
|
71
180
|
</View>
|
|
72
181
|
</BackgroundImage>
|
|
73
182
|
</Container>
|
|
74
183
|
);
|
|
75
184
|
};
|
|
76
|
-
|
|
77
|
-
const styles = StyleSheet.create({
|
|
78
|
-
logo: {
|
|
79
|
-
height: 65,
|
|
80
|
-
width: 300,
|
|
81
|
-
},
|
|
82
|
-
wrapperContent: {
|
|
83
|
-
width: '100%',
|
|
84
|
-
},
|
|
85
|
-
wrapperText: {
|
|
86
|
-
marginBottom: 20,
|
|
87
|
-
},
|
|
88
|
-
textTitle: {
|
|
89
|
-
fontWeight: '600',
|
|
90
|
-
fontStyle: 'normal',
|
|
91
|
-
fontSize: 50,
|
|
92
|
-
},
|
|
93
|
-
textSubtitle: {
|
|
94
|
-
fontWeight: 'normal',
|
|
95
|
-
fontStyle: 'normal',
|
|
96
|
-
fontSize: 14,
|
|
97
|
-
},
|
|
98
|
-
wrapperBtn: {
|
|
99
|
-
marginBottom: 20,
|
|
100
|
-
},
|
|
101
|
-
btn: {
|
|
102
|
-
borderRadius: 7.6,
|
|
103
|
-
marginTop: 20,
|
|
104
|
-
},
|
|
105
|
-
btnText: {
|
|
106
|
-
fontFamily: 'Poppins',
|
|
107
|
-
fontStyle: 'normal',
|
|
108
|
-
fontWeight: 'normal',
|
|
109
|
-
fontSize: 18,
|
|
110
|
-
},
|
|
111
|
-
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import styled from 'styled-components/native';
|
|
1
|
+
import styled, { css } from 'styled-components/native';
|
|
2
2
|
|
|
3
3
|
export const Container = styled.View`
|
|
4
4
|
width: 100%;
|
|
@@ -25,3 +25,10 @@ export const BackgroundImage = styled.ImageBackground`
|
|
|
25
25
|
align-items: center;
|
|
26
26
|
padding: 20px 40px;
|
|
27
27
|
`;
|
|
28
|
+
|
|
29
|
+
export const FormInput = styled.View`
|
|
30
|
+
display: flex;
|
|
31
|
+
flex-direction: column;
|
|
32
|
+
width: 100%;
|
|
33
|
+
min-height: 50px;
|
|
34
|
+
`;
|
|
@@ -1,50 +1,55 @@
|
|
|
1
|
-
import React, { useState, useEffect
|
|
2
|
-
import
|
|
1
|
+
import React, { useState, useEffect } from 'react'
|
|
2
|
+
import moment from 'moment'
|
|
3
3
|
import { View, Modal, StyleSheet, TouchableOpacity, Dimensions } from 'react-native'
|
|
4
|
-
import
|
|
5
|
-
import { useTheme } from 'styled-components/native'
|
|
4
|
+
import Sound from 'react-native-sound'
|
|
6
5
|
import Icon from 'react-native-vector-icons/Feather'
|
|
6
|
+
import { useTheme } from 'styled-components/native'
|
|
7
|
+
import { useEvent, useLanguage, useSession, useApi, NewOrderNotification as NewOrderNotificationController } from 'ordering-components/native'
|
|
8
|
+
|
|
9
|
+
import { OText, OIcon } from '../shared'
|
|
7
10
|
import { NotificationContainer } from './styles'
|
|
8
|
-
import Sound from 'react-native-sound'
|
|
9
|
-
import moment from 'moment'
|
|
10
11
|
import { useLocation } from '../../hooks/useLocation'
|
|
11
|
-
|
|
12
|
+
|
|
12
13
|
Sound.setCategory('Playback')
|
|
13
14
|
|
|
14
15
|
const windowWidth = Dimensions.get('screen').width
|
|
15
16
|
|
|
16
|
-
const NewOrderNotificationUI = (
|
|
17
|
+
const NewOrderNotificationUI = () => {
|
|
17
18
|
const [events] = useEvent()
|
|
18
19
|
const theme = useTheme()
|
|
19
20
|
const [, t] = useLanguage()
|
|
20
21
|
const [{ user, token }] = useSession()
|
|
21
22
|
const [ordering] = useApi()
|
|
22
|
-
const [{ getTimeAgo }] = useUtils()
|
|
23
23
|
const { getCurrentLocation } = useLocation();
|
|
24
|
-
const [modalOpen, setModalOpen] = useState(false)
|
|
25
|
-
const [newOrderId, setNewOrderId] = useState(null)
|
|
26
|
-
const [messageOrderId, setMessageOrderId] = useState(null)
|
|
27
24
|
const [soundTimeout, setSoundTimeout] = useState<any>(null)
|
|
28
|
-
const [
|
|
29
|
-
|
|
25
|
+
const [currentEvent, setCurrentEvent] = useState<any>(null)
|
|
26
|
+
|
|
27
|
+
const evtList: any = {
|
|
28
|
+
1: {
|
|
29
|
+
event: 'messages',
|
|
30
|
+
message: t('NEW_MESSAGES_RECEIVED', 'New messages have been received!'),
|
|
31
|
+
message2: t('ORDER_N_UNREAD_MESSAGES', 'Order #_order_id_ has unread messages.').replace('_order_id_', currentEvent?.orderId),
|
|
32
|
+
},
|
|
33
|
+
2: {
|
|
34
|
+
event: 'order_added',
|
|
35
|
+
message: t('NEW_ORDERS_RECEIVED', 'New orders have been received!'),
|
|
36
|
+
message2: t('ORDER_N_ORDERED', 'Order #_order_id_ has been ordered.').replace('_order_id_', currentEvent?.orderId),
|
|
37
|
+
},
|
|
38
|
+
3: {
|
|
39
|
+
event: 'order_updated',
|
|
40
|
+
message: t('NEW_ORDERS_UPDATED', 'New orders have been updated!'),
|
|
41
|
+
message2: t('ORDER_N_UPDATED', 'Order #_order_id_ has been updated.').replace('_order_id_', currentEvent?.orderId),
|
|
42
|
+
},
|
|
43
|
+
}
|
|
30
44
|
|
|
31
|
-
const notificationSound = new Sound(theme.sounds.notification,
|
|
32
|
-
if (error) {
|
|
33
|
-
console.log('failed to load the sound', error);
|
|
34
|
-
return
|
|
35
|
-
}
|
|
36
|
-
console.log('loaded successfully');
|
|
37
|
-
});
|
|
45
|
+
const notificationSound = new Sound(theme.sounds.notification, (e) => { console.log(e) });
|
|
38
46
|
|
|
39
47
|
const handlePlayNotificationSound = () => {
|
|
40
48
|
let times = 0
|
|
41
49
|
const _timeout = setInterval(function () {
|
|
42
50
|
notificationSound.play(success => {
|
|
43
51
|
if (success) {
|
|
44
|
-
console.log('successfully finished playing');
|
|
45
52
|
times = times + 1
|
|
46
|
-
} else {
|
|
47
|
-
console.log('playback failed due to audio decoding errors');
|
|
48
53
|
}
|
|
49
54
|
})
|
|
50
55
|
setSoundTimeout(_timeout)
|
|
@@ -57,39 +62,11 @@ const NewOrderNotificationUI = (props: any) => {
|
|
|
57
62
|
|
|
58
63
|
const handleCloseModal = () => {
|
|
59
64
|
clearInterval(soundTimeout)
|
|
60
|
-
|
|
61
|
-
setNewOrderId(null)
|
|
62
|
-
setMessageOrderId(null)
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
const handleNotification = (order: any) => {
|
|
66
|
-
setModalOpen(true)
|
|
67
|
-
clearInterval(soundTimeout)
|
|
68
|
-
setCurrentChange(1)
|
|
69
|
-
handlePlayNotificationSound()
|
|
70
|
-
setNewOrderId(order.id)
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
const handleMessageNotification = (message: any) => {
|
|
74
|
-
const { order_id: orderId } = message;
|
|
75
|
-
if (!modalOpen) setModalOpen(true)
|
|
76
|
-
clearInterval(soundTimeout)
|
|
77
|
-
setCurrentChange(2)
|
|
78
|
-
handlePlayNotificationSound()
|
|
79
|
-
setMessageOrderId(orderId)
|
|
65
|
+
setCurrentEvent({ evt: null })
|
|
80
66
|
}
|
|
81
67
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
events.on('message_added_noification', handleMessageNotification)
|
|
85
|
-
return () => {
|
|
86
|
-
events.off('order_added_noification', handleNotification)
|
|
87
|
-
events.off('message_added_noification', handleMessageNotification)
|
|
88
|
-
}
|
|
89
|
-
}, [])
|
|
90
|
-
|
|
91
|
-
const handleUpdateOrder = useCallback(async (order: any) => {
|
|
92
|
-
if (order?.driver) {
|
|
68
|
+
const handleEventNotification = async (evtType: number, value: any) => {
|
|
69
|
+
if (value?.driver) {
|
|
93
70
|
const location = await getCurrentLocation()
|
|
94
71
|
await fetch(`${ordering.root}/users/${user.id}/locations`, {
|
|
95
72
|
method: 'POST',
|
|
@@ -98,25 +75,32 @@ const NewOrderNotificationUI = (props: any) => {
|
|
|
98
75
|
}),
|
|
99
76
|
headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` }
|
|
100
77
|
})
|
|
101
|
-
const assignedTimeDiff = moment.utc(
|
|
78
|
+
const assignedTimeDiff = moment.utc(value?.driver?.last_order_assigned_at).local().fromNow()
|
|
102
79
|
if (assignedTimeDiff === 'a few seconds ago') {
|
|
103
|
-
clearInterval(soundTimeout)
|
|
104
80
|
handlePlayNotificationSound()
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
setModalOpen(true)
|
|
108
|
-
}
|
|
81
|
+
clearInterval(soundTimeout)
|
|
82
|
+
setCurrentEvent({ evt: 2, orderId: value?.id })
|
|
109
83
|
}
|
|
84
|
+
return
|
|
110
85
|
}
|
|
111
|
-
|
|
86
|
+
handlePlayNotificationSound()
|
|
87
|
+
clearInterval(soundTimeout)
|
|
88
|
+
setCurrentEvent({
|
|
89
|
+
evt: evtType,
|
|
90
|
+
orderId: evtList[evtType].event === 'messages' ? value?.order_id : value?.id
|
|
91
|
+
})
|
|
92
|
+
}
|
|
112
93
|
|
|
113
94
|
useEffect(() => {
|
|
114
|
-
|
|
115
|
-
events.on('
|
|
95
|
+
events.on('message_added_notification', (o: any) => handleEventNotification(1, o))
|
|
96
|
+
events.on('order_added_notification', (o: any) => handleEventNotification(2, o))
|
|
97
|
+
events.on('order_updated_notification', (o: any) => handleEventNotification(3, o))
|
|
116
98
|
return () => {
|
|
117
|
-
events.off('
|
|
99
|
+
events.off('message_added_notification', (o: any) => handleEventNotification(1, o))
|
|
100
|
+
events.off('order_added_notification', (o: any) => handleEventNotification(2, o))
|
|
101
|
+
events.off('order_updated_notification', (o: any) => handleEventNotification(3, o))
|
|
118
102
|
}
|
|
119
|
-
}, [
|
|
103
|
+
}, [])
|
|
120
104
|
|
|
121
105
|
useEffect(() => {
|
|
122
106
|
notificationSound.setVolume(1);
|
|
@@ -125,21 +109,12 @@ const NewOrderNotificationUI = (props: any) => {
|
|
|
125
109
|
}
|
|
126
110
|
}, [])
|
|
127
111
|
|
|
128
|
-
useFocusEffect(
|
|
129
|
-
useCallback(() => {
|
|
130
|
-
setIsFocused(true)
|
|
131
|
-
return () => {
|
|
132
|
-
setIsFocused(false)
|
|
133
|
-
}
|
|
134
|
-
}, [])
|
|
135
|
-
)
|
|
136
|
-
|
|
137
112
|
return (
|
|
138
113
|
<>
|
|
139
114
|
<Modal
|
|
140
115
|
animationType='slide'
|
|
141
116
|
transparent={true}
|
|
142
|
-
visible={
|
|
117
|
+
visible={!!currentEvent?.orderId}
|
|
143
118
|
>
|
|
144
119
|
<NotificationContainer>
|
|
145
120
|
<View style={styles.modalView}>
|
|
@@ -147,40 +122,26 @@ const NewOrderNotificationUI = (props: any) => {
|
|
|
147
122
|
style={styles.wrapperIcon}
|
|
148
123
|
onPress={() => handleCloseModal()}
|
|
149
124
|
>
|
|
150
|
-
<Icon
|
|
151
|
-
name="x"
|
|
152
|
-
size={30}
|
|
153
|
-
/>
|
|
125
|
+
<Icon name="x" size={30} />
|
|
154
126
|
</TouchableOpacity>
|
|
155
127
|
<OText
|
|
156
128
|
size={18}
|
|
157
129
|
color={theme.colors.textGray}
|
|
158
130
|
weight={600}
|
|
159
131
|
>
|
|
160
|
-
{
|
|
132
|
+
{evtList[currentEvent?.evt]?.message}
|
|
161
133
|
</OText>
|
|
162
134
|
<OIcon
|
|
163
135
|
src={theme.images.general.newOrder}
|
|
164
136
|
width={250}
|
|
165
137
|
height={200}
|
|
166
138
|
/>
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
</OText>
|
|
174
|
-
)}
|
|
175
|
-
|
|
176
|
-
{messageOrderId !== null && (
|
|
177
|
-
<OText
|
|
178
|
-
color={theme.colors.textGray}
|
|
179
|
-
mBottom={15}
|
|
180
|
-
>
|
|
181
|
-
{t('ORDER_N_UNREAD_MESSAGES', 'Order #_order_id_ has unread messages.').replace('_order_id_', messageOrderId)}
|
|
182
|
-
</OText>
|
|
183
|
-
)}
|
|
139
|
+
<OText
|
|
140
|
+
color={theme.colors.textGray}
|
|
141
|
+
mBottom={15}
|
|
142
|
+
>
|
|
143
|
+
{evtList[currentEvent?.evt]?.message2}
|
|
144
|
+
</OText>
|
|
184
145
|
</View>
|
|
185
146
|
</NotificationContainer>
|
|
186
147
|
</Modal>
|
|
@@ -335,7 +335,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
335
335
|
addressName: order?.business?.address,
|
|
336
336
|
zipcode: order?.business?.zipcode
|
|
337
337
|
},
|
|
338
|
-
icon: order?.business?.logo ||
|
|
338
|
+
icon: order?.business?.logo || 'https://res.cloudinary.com/demo/image/fetch/c_thumb,g_face,r_max/https://res.cloudinary.com/ordering2/image/upload/v1654619525/hzegwosnplvrbtjkpfi6.png',
|
|
339
339
|
level: 2,
|
|
340
340
|
},
|
|
341
341
|
{
|
|
@@ -431,6 +431,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
431
431
|
handleViewSummaryOrder={handleViewSummaryOrder}
|
|
432
432
|
handleCopyClipboard={handleCopyClipboard}
|
|
433
433
|
handleArrowBack={handleArrowBack}
|
|
434
|
+
isCustomView={props.isCustomView}
|
|
434
435
|
/>
|
|
435
436
|
<OrderDetailsContainer
|
|
436
437
|
keyboardShouldPersistTaps="handled"
|
|
@@ -51,7 +51,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
51
51
|
orderTitle,
|
|
52
52
|
appTitle,
|
|
53
53
|
handleClickLogisticOrder,
|
|
54
|
-
forceUpdate
|
|
54
|
+
forceUpdate,
|
|
55
|
+
getPermissions
|
|
55
56
|
} = props;
|
|
56
57
|
const [, { showToast }] = useToast();
|
|
57
58
|
const { order } = props.order
|
|
@@ -72,6 +73,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
72
73
|
key?: string | null;
|
|
73
74
|
}>({ open: false, content: [], key: null });
|
|
74
75
|
|
|
76
|
+
const validStatusComplete = [9, 19, 23]
|
|
77
|
+
|
|
75
78
|
const logisticOrderStatus = [4, 6, 7]
|
|
76
79
|
|
|
77
80
|
const showFloatButtonsPickUp: any = {
|
|
@@ -101,9 +104,14 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
101
104
|
};
|
|
102
105
|
|
|
103
106
|
const handleOpenMapView = async () => {
|
|
104
|
-
|
|
107
|
+
const _permissions = await getPermissions()
|
|
108
|
+
|
|
109
|
+
const isBlocked = _permissions.some((_permission: string) => permissions?.locationStatus?.[_permission] === 'blocked')
|
|
110
|
+
const isGranted = _permissions.reduce((allPermissions: boolean, _permission: string) => allPermissions && permissions?.locationStatus?.[_permission] === 'granted', true)
|
|
111
|
+
|
|
112
|
+
if (isGranted) {
|
|
105
113
|
setOpenModalForMapView(!openModalForMapView);
|
|
106
|
-
} else if (
|
|
114
|
+
} else if (isBlocked) {
|
|
107
115
|
// redirectToSettings();
|
|
108
116
|
showToast(
|
|
109
117
|
ToastType.Error,
|
|
@@ -114,8 +122,9 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
114
122
|
);
|
|
115
123
|
} else {
|
|
116
124
|
const response = await askLocationPermission();
|
|
117
|
-
|
|
118
|
-
|
|
125
|
+
const isGranted = _permissions.reduce((allPermissions: boolean, _permission: string) => allPermissions && response?.locationStatus?.[_permission] === 'granted', true)
|
|
126
|
+
if (isGranted) {
|
|
127
|
+
setOpenModalForMapView(true)
|
|
119
128
|
}
|
|
120
129
|
}
|
|
121
130
|
};
|
|
@@ -141,9 +150,9 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
141
150
|
handleArrowBack()
|
|
142
151
|
}
|
|
143
152
|
|
|
144
|
-
const handleAcceptLogisticOrder = (order
|
|
153
|
+
const handleAcceptLogisticOrder = (order: any) => {
|
|
145
154
|
handleClickLogisticOrder?.(1, order?.logistic_order_id)
|
|
146
|
-
if(order?.order_group){
|
|
155
|
+
if (order?.order_group) {
|
|
147
156
|
handleArrowBack()
|
|
148
157
|
}
|
|
149
158
|
}
|
|
@@ -166,10 +175,10 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
166
175
|
];
|
|
167
176
|
|
|
168
177
|
useEffect(() => {
|
|
169
|
-
if (permissions
|
|
178
|
+
if (permissions?.locationStatus !== 'granted' && openModalForMapView) {
|
|
170
179
|
setOpenModalForMapView(false);
|
|
171
180
|
}
|
|
172
|
-
}, [permissions
|
|
181
|
+
}, [permissions?.locationStatus]);
|
|
173
182
|
|
|
174
183
|
useEffect(() => {
|
|
175
184
|
if (openModalForAccept) {
|
|
@@ -215,8 +224,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
215
224
|
}, [messagesReadList]);
|
|
216
225
|
|
|
217
226
|
useEffect(() => {
|
|
218
|
-
forceUpdate && handleViewActionOrder && handleViewActionOrder(forceUpdate === 9 ? 'forcePickUp': 'forceDelivery')
|
|
219
|
-
},[forceUpdate])
|
|
227
|
+
forceUpdate && handleViewActionOrder && handleViewActionOrder(forceUpdate === 9 ? 'forcePickUp' : 'forceDelivery')
|
|
228
|
+
}, [forceUpdate])
|
|
220
229
|
|
|
221
230
|
const styles = StyleSheet.create({
|
|
222
231
|
btnPickUp: {
|
|
@@ -254,7 +263,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
254
263
|
);
|
|
255
264
|
}
|
|
256
265
|
|
|
257
|
-
const OrderDetailsInformation = (props
|
|
266
|
+
const OrderDetailsInformation = (props: { order: any, isOrderGroup?: boolean, lastOrder?: boolean }) => {
|
|
258
267
|
const {
|
|
259
268
|
order,
|
|
260
269
|
isOrderGroup,
|
|
@@ -378,7 +387,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
378
387
|
widthButton={'45%'}
|
|
379
388
|
/>
|
|
380
389
|
)}
|
|
381
|
-
{(order?.status
|
|
390
|
+
{(validStatusComplete.includes(order?.status)) && (
|
|
382
391
|
<>
|
|
383
392
|
<FloatingButton
|
|
384
393
|
disabled={props.order?.loading}
|