ordering-ui-react-native 0.14.82 → 0.14.83-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 +6 -3
- package/src/DeliveryApp.tsx +34 -2
- package/src/assets/images/no-network.png +0 -0
- package/src/components/BusinessTypeFilter/index.tsx +9 -2
- package/src/components/BusinessTypeFilter/styles.tsx +1 -1
- package/src/components/BusinessesListing/index.tsx +2 -2
- package/src/components/Cart/index.tsx +1 -1
- package/src/components/Checkout/index.tsx +1 -2
- package/src/components/Home/index.tsx +3 -5
- package/src/components/LanguageSelector/index.tsx +65 -97
- package/src/components/LanguageSelector/styles.tsx +4 -17
- package/src/components/Messages/index.tsx +38 -30
- package/src/components/MomentOption/index.tsx +3 -1
- package/src/components/OrderDetails/index.tsx +29 -6
- package/src/components/OrdersOption/index.tsx +4 -2
- package/src/components/PaymentOptions/index.tsx +7 -16
- package/src/components/PaymentOptionsWebView/index.tsx +123 -124
- package/src/components/ProductForm/index.tsx +1 -1
- package/src/components/ProductForm/styles.tsx +1 -0
- package/src/components/StripeElementsForm/index.tsx +27 -48
- package/src/components/UserProfileForm/index.tsx +35 -1
- package/src/components/VerifyPhone/styles.tsx +1 -2
- package/src/config.json +0 -2
- package/src/pages/Checkout.tsx +1 -1
- package/src/providers/AlertProvider.tsx +4 -1
- package/src/theme.json +2 -1
- package/src/types/index.tsx +2 -9
- package/src/utils/index.tsx +196 -1
- package/themes/business/index.tsx +4 -0
- package/themes/business/src/components/Chat/index.tsx +32 -31
- package/themes/business/src/components/NetworkError/index.tsx +61 -0
- package/themes/business/src/components/NetworkError/styles.tsx +11 -0
- package/themes/business/src/components/OrderDetails/Business.tsx +1 -0
- package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +85 -17
- package/themes/business/src/components/OrdersListManager/index.tsx +871 -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 +354 -54
- package/themes/business/src/components/OrdersOption/styles.tsx +95 -7
- package/themes/business/src/components/PreviousMessages/index.tsx +12 -0
- package/themes/business/src/components/PreviousOrders/index.tsx +65 -46
- package/themes/business/src/components/PreviousOrders/styles.tsx +5 -10
- package/themes/business/src/components/ReviewCustomer/index.tsx +11 -8
- package/themes/business/src/types/index.tsx +4 -0
- package/themes/business/src/utils/index.tsx +12 -0
- package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
- package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
- package/themes/doordash/src/components/OrderDetails/index.tsx +3 -1
- package/themes/doordash/src/components/OrdersOption/index.tsx +4 -2
- package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
- package/themes/instacart/src/components/OrderDetails/index.tsx +3 -1
- package/themes/instacart/src/components/OrdersOption/index.tsx +4 -2
- package/themes/kiosk/index.tsx +2 -0
- 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 +51 -24
- package/themes/kiosk/src/components/Cart/index.tsx +1 -1
- 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 +7 -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/NetworkError/index.tsx +60 -0
- package/themes/kiosk/src/components/NetworkError/styles.tsx +11 -0
- package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
- package/themes/kiosk/src/components/OrderDetails/index.tsx +2 -2
- 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 +172 -124
- 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 +4 -0
- package/themes/original/index.tsx +28 -6
- package/themes/original/src/components/AnalyticsSegment/index.tsx +127 -0
- package/themes/original/src/components/BusinessBasicInformation/index.tsx +12 -39
- package/themes/original/src/components/BusinessController/index.tsx +2 -2
- package/themes/original/src/components/BusinessMenuList/index.tsx +4 -2
- package/themes/original/src/components/BusinessPreorder/index.tsx +3 -2
- package/themes/original/src/components/BusinessProductsList/index.tsx +50 -6
- package/themes/original/src/components/BusinessProductsListing/index.tsx +13 -10
- package/themes/original/src/components/BusinessReviews/index.tsx +4 -3
- package/themes/original/src/components/BusinessesListing/index.tsx +22 -18
- package/themes/original/src/components/Cart/index.tsx +43 -10
- package/themes/original/src/components/Checkout/index.tsx +55 -20
- package/themes/original/src/components/Checkout/styles.tsx +7 -0
- 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 +8 -12
- package/themes/original/src/components/HighestRatedBusinesses/index.tsx +9 -2
- package/themes/original/src/components/LastOrder/index.tsx +3 -1
- package/themes/original/src/components/LoginForm/index.tsx +83 -68
- package/themes/original/src/components/MessageListing/index.tsx +4 -2
- package/themes/original/src/components/Messages/index.tsx +19 -21
- package/themes/original/src/components/MomentOption/index.tsx +127 -152
- package/themes/original/src/components/MomentOption/styles.tsx +42 -18
- package/themes/original/src/components/NetworkError/index.tsx +61 -0
- package/themes/original/src/components/NetworkError/styles.tsx +11 -0
- package/themes/original/src/components/OrderDetails/index.tsx +106 -113
- package/themes/original/src/components/OrderProgress/index.tsx +6 -5
- package/themes/original/src/components/OrderSummary/index.tsx +34 -1
- package/themes/original/src/components/OrdersOption/index.tsx +20 -42
- package/themes/original/src/components/OrdersOption/styles.tsx +0 -5
- package/themes/original/src/components/PaymentOptionWallet/index.tsx +1 -1
- package/themes/original/src/components/PaymentOptions/index.tsx +20 -23
- package/themes/original/src/components/PhoneInputNumber/index.tsx +15 -8
- package/themes/original/src/components/PlaceSpot/index.tsx +114 -0
- package/themes/original/src/components/PlaceSpot/styles.tsx +11 -0
- package/themes/original/src/components/PreviousOrders/index.tsx +4 -0
- package/themes/original/src/components/ProductForm/index.tsx +33 -18
- package/themes/original/src/components/ProductForm/styles.tsx +0 -1
- package/themes/original/src/components/ProductOptionSubOption/index.tsx +81 -74
- package/themes/original/src/components/ReviewDriver/index.tsx +315 -0
- package/themes/original/src/components/ReviewDriver/styles.tsx +38 -0
- package/themes/original/src/components/ReviewOrder/index.tsx +307 -186
- package/themes/original/src/components/ReviewOrder/styles.tsx +24 -13
- package/themes/original/src/components/ReviewProducts/index.tsx +116 -0
- package/themes/original/src/components/ReviewProducts/styles.tsx +16 -0
- package/themes/original/src/components/SignupForm/index.tsx +173 -154
- package/themes/original/src/components/SingleProductCard/index.tsx +6 -13
- package/themes/original/src/components/SingleProductCard/styles.tsx +1 -1
- package/themes/original/src/components/SingleProductReview/index.tsx +166 -0
- package/themes/original/src/components/SingleProductReview/styles.tsx +27 -0
- package/themes/original/src/components/StripeElementsForm/index.tsx +55 -72
- package/themes/original/src/components/UpsellingProducts/index.tsx +6 -6
- package/themes/original/src/components/UserDetails/index.tsx +4 -95
- package/themes/original/src/components/UserFormDetails/index.tsx +2 -14
- package/themes/original/src/components/UserProfile/index.tsx +13 -6
- package/themes/original/src/components/UserProfileForm/index.tsx +16 -8
- 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/WalletTransactionItem/index.tsx +3 -2
- package/themes/original/src/components/Wallets/index.tsx +16 -8
- package/themes/original/src/layouts/FloatingBottomContainer.tsx +26 -0
- package/themes/original/src/types/index.tsx +47 -10
- package/themes/single-business/src/components/LastOrder/index.tsx +3 -1
- package/themes/single-business/src/components/OrderDetails/index.tsx +15 -0
- package/themes/single-business/src/components/OrderTypeSelector/index.tsx +5 -5
- package/themes/single-business/src/components/OrdersOption/index.tsx +4 -2
- package/themes/single-business/src/utils/index.tsx +7 -1
- package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
- package/themes/uber-eats/src/components/OrderDetails/index.tsx +3 -1
- package/themes/uber-eats/src/components/OrdersOption/index.tsx +4 -2
- package/src/components/StripeMethodForm/index.tsx +0 -163
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
2
|
import { ProductsList, useLanguage, useUtils, useConfig } from 'ordering-components/native';
|
|
3
3
|
import { SingleProductCard } from '../SingleProductCard';
|
|
4
4
|
import { NotFoundSource } from '../NotFoundSource';
|
|
5
5
|
import { BusinessProductsListParams } from '../../types';
|
|
6
|
-
import { OIcon, OText } from '../shared';
|
|
6
|
+
import { OButton, OIcon, OModal, OText } from '../shared';
|
|
7
7
|
import { ProductsContainer, ErrorMessage, WrapperNotFound } from './styles';
|
|
8
8
|
import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
|
|
9
9
|
import { View } from 'react-native';
|
|
10
10
|
import { StyleSheet } from 'react-native';
|
|
11
|
+
import { useTheme } from 'styled-components/native';
|
|
11
12
|
|
|
12
13
|
const BusinessProductsListUI = (props: BusinessProductsListParams) => {
|
|
13
14
|
const {
|
|
@@ -32,8 +33,9 @@ const BusinessProductsListUI = (props: BusinessProductsListParams) => {
|
|
|
32
33
|
const [, t] = useLanguage();
|
|
33
34
|
const [{ optimizeImage }] = useUtils()
|
|
34
35
|
const [{ configs }] = useConfig()
|
|
36
|
+
const theme = useTheme()
|
|
35
37
|
const isUseParentCategory = configs?.use_parent_category?.value === 'true' || configs?.use_parent_category?.value === '1'
|
|
36
|
-
|
|
38
|
+
const [openDescription, setOpenDescription] = useState<any>(null)
|
|
37
39
|
const handleOnLayout = (event: any, categoryId: any) => {
|
|
38
40
|
const _categoriesLayout = { ...categoriesLayout }
|
|
39
41
|
const categoryKey = 'cat_' + categoryId
|
|
@@ -84,8 +86,11 @@ const BusinessProductsListUI = (props: BusinessProductsListParams) => {
|
|
|
84
86
|
|
|
85
87
|
{!category?.id && categories.filter(category => category?.id !== null).map((category, i, _categories) => {
|
|
86
88
|
const products = !isUseParentCategory
|
|
87
|
-
? categoryState?.products?.filter((product
|
|
88
|
-
: categoryState?.products?.filter((product
|
|
89
|
+
? categoryState?.products?.filter((product: any) => product?.category_id === category?.id) ?? []
|
|
90
|
+
: categoryState?.products?.filter((product: any) => category?.children?.some((cat: any) => cat.category_id === product?.category_id)) ?? []
|
|
91
|
+
|
|
92
|
+
const shortCategoryDescription = category?.description?.length > 80 ? `${category?.description?.substring(0, 80)}...` : category?.description
|
|
93
|
+
|
|
89
94
|
return (
|
|
90
95
|
<React.Fragment key={'cat_' + category.id}>
|
|
91
96
|
{products.length > 0 && (
|
|
@@ -96,7 +101,7 @@ const BusinessProductsListUI = (props: BusinessProductsListParams) => {
|
|
|
96
101
|
>
|
|
97
102
|
<View style={bpStyles.catIcon}>
|
|
98
103
|
<OIcon
|
|
99
|
-
url={optimizeImage(category.image, '
|
|
104
|
+
url={optimizeImage(category.image, 'h_250,c_limit')}
|
|
100
105
|
width={41}
|
|
101
106
|
height={41}
|
|
102
107
|
style={{ borderRadius: 7.6 }}
|
|
@@ -106,6 +111,28 @@ const BusinessProductsListUI = (props: BusinessProductsListParams) => {
|
|
|
106
111
|
{category.name}
|
|
107
112
|
</OText>
|
|
108
113
|
</View>
|
|
114
|
+
{!!category?.description && (
|
|
115
|
+
<View style={{ position: 'relative' }}>
|
|
116
|
+
<OText size={12} weight={'500'} mBottom={5}>
|
|
117
|
+
{shortCategoryDescription}
|
|
118
|
+
{category?.description?.length > 80 && (
|
|
119
|
+
<OButton
|
|
120
|
+
style={{ height: 15, paddingRight: 0, paddingLeft: 0, borderWidth: 0 }}
|
|
121
|
+
text={t('SEE_MORE', 'See more')}
|
|
122
|
+
parentStyle={{ padding: 0 }}
|
|
123
|
+
onClick={() => setOpenDescription(category)}
|
|
124
|
+
bgColor='transparent'
|
|
125
|
+
textStyle={{
|
|
126
|
+
fontSize: 12,
|
|
127
|
+
borderBottomWidth: 1,
|
|
128
|
+
borderBottomColor: theme.colors.primary,
|
|
129
|
+
color: theme.colors.primary
|
|
130
|
+
}}
|
|
131
|
+
/>
|
|
132
|
+
)}
|
|
133
|
+
</OText>
|
|
134
|
+
</View>
|
|
135
|
+
)}
|
|
109
136
|
<>
|
|
110
137
|
{products.sort((a: any, b: any) => a.rank - b.rank).map((product: any, i: any) => (
|
|
111
138
|
<SingleProductCard
|
|
@@ -188,6 +215,23 @@ const BusinessProductsListUI = (props: BusinessProductsListParams) => {
|
|
|
188
215
|
<OText>{e}</OText>
|
|
189
216
|
</ErrorMessage>
|
|
190
217
|
))}
|
|
218
|
+
<OModal
|
|
219
|
+
open={!!openDescription}
|
|
220
|
+
title={openDescription?.name}
|
|
221
|
+
onClose={() => setOpenDescription(null)}
|
|
222
|
+
>
|
|
223
|
+
<View style={{ padding: 20 }}>
|
|
224
|
+
{!!openDescription?.image && (
|
|
225
|
+
<OIcon
|
|
226
|
+
url={optimizeImage(openDescription?.image, 'h_100,c_limit')}
|
|
227
|
+
width={240}
|
|
228
|
+
height={240}
|
|
229
|
+
style={{ borderRadius: 7.6 }}
|
|
230
|
+
/>
|
|
231
|
+
)}
|
|
232
|
+
<OText>{openDescription?.description}</OText>
|
|
233
|
+
</View>
|
|
234
|
+
</OModal>
|
|
191
235
|
</ProductsContainer>
|
|
192
236
|
);
|
|
193
237
|
};
|
|
@@ -8,7 +8,8 @@ import {
|
|
|
8
8
|
useSession,
|
|
9
9
|
useUtils,
|
|
10
10
|
ToastType,
|
|
11
|
-
useToast
|
|
11
|
+
useToast,
|
|
12
|
+
useConfig
|
|
12
13
|
} from 'ordering-components/native'
|
|
13
14
|
import { OButton, OIcon, OModal, OText } from '../shared'
|
|
14
15
|
import { BusinessBasicInformation } from '../BusinessBasicInformation'
|
|
@@ -52,7 +53,8 @@ const BusinessProductsListingUI = (props: BusinessProductsListingParams) => {
|
|
|
52
53
|
const [orderState] = useOrder()
|
|
53
54
|
const [{ parsePrice }] = useUtils()
|
|
54
55
|
const [, { showToast }] = useToast()
|
|
55
|
-
|
|
56
|
+
const [{ configs }] = useConfig()
|
|
57
|
+
const isPreOrder = configs?.preorder_status_enabled?.value === '1'
|
|
56
58
|
const styles = StyleSheet.create({
|
|
57
59
|
mainContainer: {
|
|
58
60
|
flex: 1,
|
|
@@ -96,10 +98,10 @@ const BusinessProductsListingUI = (props: BusinessProductsListingParams) => {
|
|
|
96
98
|
}
|
|
97
99
|
|
|
98
100
|
const onProductClick = (product: any) => {
|
|
99
|
-
|
|
101
|
+
onRedirect('ProductDetails', {
|
|
100
102
|
product: product,
|
|
101
|
-
|
|
102
|
-
|
|
103
|
+
businessSlug: business.slug,
|
|
104
|
+
businessId: business.id,
|
|
103
105
|
})
|
|
104
106
|
}
|
|
105
107
|
|
|
@@ -154,8 +156,8 @@ const BusinessProductsListingUI = (props: BusinessProductsListingParams) => {
|
|
|
154
156
|
|
|
155
157
|
const handleTouchDrag = useCallback(() => {
|
|
156
158
|
setCategoryClicked(false);
|
|
157
|
-
|
|
158
|
-
|
|
159
|
+
}, []);
|
|
160
|
+
|
|
159
161
|
const handleBackNavigation = () => {
|
|
160
162
|
navigation?.canGoBack() ? navigation.goBack() : navigation.navigate('BottomTab')
|
|
161
163
|
}
|
|
@@ -218,6 +220,7 @@ const BusinessProductsListingUI = (props: BusinessProductsListingParams) => {
|
|
|
218
220
|
openBusinessInformation={openBusinessInformation}
|
|
219
221
|
header={header}
|
|
220
222
|
logo={logo}
|
|
223
|
+
isPreOrder={isPreOrder}
|
|
221
224
|
/>
|
|
222
225
|
<View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100 }} />
|
|
223
226
|
{!loading && business?.id && (
|
|
@@ -235,7 +238,7 @@ const BusinessProductsListingUI = (props: BusinessProductsListingParams) => {
|
|
|
235
238
|
selectedCategoryId={selectedCategoryId}
|
|
236
239
|
lazyLoadProductsRecommended={business?.lazy_load_products_recommended}
|
|
237
240
|
setSelectedCategoryId={setSelectedCategoryId}
|
|
238
|
-
|
|
241
|
+
setCategoryClicked={setCategoryClicked}
|
|
239
242
|
/>
|
|
240
243
|
)}
|
|
241
244
|
</>
|
|
@@ -313,13 +316,13 @@ const BusinessProductsListingUI = (props: BusinessProductsListingParams) => {
|
|
|
313
316
|
business={currentCart?.business}
|
|
314
317
|
cartProducts={currentCart?.products}
|
|
315
318
|
cart={currentCart}
|
|
316
|
-
|
|
319
|
+
setOpenUpselling={setOpenUpselling}
|
|
317
320
|
handleUpsellingPage={handleUpsellingPage}
|
|
318
321
|
handleCloseUpsellingPage={handleCloseUpsellingPage}
|
|
319
322
|
openUpselling={openUpselling}
|
|
320
323
|
canOpenUpselling={canOpenUpselling}
|
|
321
324
|
setCanOpenUpselling={setCanOpenUpselling}
|
|
322
|
-
|
|
325
|
+
onRedirect={onRedirect}
|
|
323
326
|
/>
|
|
324
327
|
)}
|
|
325
328
|
</SafeAreaView>
|
|
@@ -237,9 +237,10 @@ const BusinessReviewsUI = (props: BusinessReviewsParams) => {
|
|
|
237
237
|
))}
|
|
238
238
|
</>
|
|
239
239
|
)}
|
|
240
|
-
{
|
|
241
|
-
|
|
242
|
-
|
|
240
|
+
{reviewsList?.reviews
|
|
241
|
+
.filter((review: any) => searchReview !== '' ? review.comment?.toLowerCase()?.includes(searchReview?.toLowerCase()) : true).length === 0 && (
|
|
242
|
+
<OText>{t('REVIEWS_NOT_FOUND', 'Reviews Not Found')}</OText>
|
|
243
|
+
)}
|
|
243
244
|
</BusinessReviewContent>
|
|
244
245
|
</BusinessReviewsContainer>
|
|
245
246
|
);
|
|
@@ -117,6 +117,9 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
|
|
|
117
117
|
const [featuredBusiness, setFeaturedBusinesses] = useState(Array);
|
|
118
118
|
const [isFarAway, setIsFarAway] = useState(false)
|
|
119
119
|
|
|
120
|
+
const isPreorderEnabled = (configs?.preorder_status_enabled?.value === '1' || configs?.preorder_status_enabled?.value === 'true') &&
|
|
121
|
+
Number(configs?.max_days_preorder?.value) > 0
|
|
122
|
+
|
|
120
123
|
const timerId = useRef<any>(false)
|
|
121
124
|
// const panResponder = useRef(
|
|
122
125
|
// PanResponder.create({
|
|
@@ -128,6 +131,12 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
|
|
|
128
131
|
// })
|
|
129
132
|
// ).current
|
|
130
133
|
|
|
134
|
+
const handleMomentClick = () => {
|
|
135
|
+
if (isPreorderEnabled) {
|
|
136
|
+
navigation.navigate('MomentOption')
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
131
140
|
const configTypes =
|
|
132
141
|
configs?.order_types_allowed?.value
|
|
133
142
|
.split('|')
|
|
@@ -158,7 +167,7 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
|
|
|
158
167
|
|
|
159
168
|
useEffect(() => {
|
|
160
169
|
if (businessesList.businesses.length > 0) {
|
|
161
|
-
const fb = businessesList.businesses.filter((b) => b.featured
|
|
170
|
+
const fb = businessesList.businesses.filter((b) => b.featured === true && b?.open);
|
|
162
171
|
const ary = [];
|
|
163
172
|
while (fb.length > 0) {
|
|
164
173
|
ary.push(fb.splice(0, 2));
|
|
@@ -198,14 +207,12 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
|
|
|
198
207
|
}, [orderState?.options?.address?.location])
|
|
199
208
|
|
|
200
209
|
useEffect(() => {
|
|
201
|
-
const onFocusApp = (nextAppState
|
|
210
|
+
const onFocusApp = (nextAppState: any) => {
|
|
202
211
|
if (
|
|
203
212
|
appState.current.match(/inactive|background/) &&
|
|
204
213
|
nextAppState === "active"
|
|
205
214
|
) {
|
|
206
|
-
|
|
207
|
-
getBusinesses(true);
|
|
208
|
-
}
|
|
215
|
+
getBusinesses(true);
|
|
209
216
|
}
|
|
210
217
|
appState.current = nextAppState;
|
|
211
218
|
setAppStateVisible(appState.current);
|
|
@@ -281,26 +288,23 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
|
|
|
281
288
|
/>
|
|
282
289
|
</WrapMomentOption>
|
|
283
290
|
<WrapMomentOption
|
|
284
|
-
onPress={() =>
|
|
291
|
+
onPress={() => handleMomentClick()}>
|
|
285
292
|
<OText
|
|
286
293
|
size={12}
|
|
287
294
|
numberOfLines={1}
|
|
288
295
|
ellipsizeMode="tail"
|
|
289
296
|
color={theme.colors.textSecondary}>
|
|
290
|
-
{orderState.options?.
|
|
291
|
-
? parseDate(orderState.options?.moment, {
|
|
292
|
-
outputFormat:
|
|
293
|
-
configs?.format_time?.value === '12'
|
|
294
|
-
? 'MM/DD hh:mma'
|
|
295
|
-
: 'MM/DD HH:mm',
|
|
296
|
-
})
|
|
297
|
+
{orderState.options?.momentß
|
|
298
|
+
? parseDate(orderState.options?.moment, { outputFormat: configs?.dates_moment_format?.value })
|
|
297
299
|
: t('ASAP_ABBREVIATION', 'ASAP')}
|
|
298
300
|
</OText>
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
301
|
+
{isPreorderEnabled && (
|
|
302
|
+
<OIcon
|
|
303
|
+
src={theme.images.general.arrow_down}
|
|
304
|
+
width={10}
|
|
305
|
+
style={{ marginStart: 8 }}
|
|
306
|
+
/>
|
|
307
|
+
)}
|
|
304
308
|
</WrapMomentOption>
|
|
305
309
|
|
|
306
310
|
{!businessId && (
|
|
@@ -24,6 +24,7 @@ import AntIcon from 'react-native-vector-icons/AntDesign'
|
|
|
24
24
|
import { TaxInformation } from '../TaxInformation';
|
|
25
25
|
import { CartStoresListing } from '../CartStoresListing';
|
|
26
26
|
import { OAlert } from '../../../../../src/components/shared'
|
|
27
|
+
import { PlaceSpot } from '../PlaceSpot'
|
|
27
28
|
|
|
28
29
|
const CartUI = (props: any) => {
|
|
29
30
|
const {
|
|
@@ -54,12 +55,14 @@ const CartUI = (props: any) => {
|
|
|
54
55
|
const [canOpenUpselling, setCanOpenUpselling] = useState(false)
|
|
55
56
|
const [openTaxModal, setOpenTaxModal] = useState<any>({ open: false, data: null, type: '' })
|
|
56
57
|
const [confirm, setConfirm] = useState<any>({ open: false, content: null, handleOnAccept: null, id: null, title: null })
|
|
58
|
+
const [openPlaceModal, setOpenPlaceModal] = useState(false)
|
|
57
59
|
|
|
58
60
|
const isCartPending = cart?.status === 2
|
|
59
61
|
const isCouponEnabled = validationFields?.fields?.checkout?.coupon?.enabled
|
|
60
62
|
|
|
61
63
|
const business: any = (orderState?.carts && Object.values(orderState.carts).find((_cart: any) => _cart?.uuid === props.cartuuid)) ?? {}
|
|
62
64
|
const businessId = business?.business_id ?? null
|
|
65
|
+
const placeSpotTypes = [3, 4]
|
|
63
66
|
|
|
64
67
|
const momentFormatted = !orderState?.option?.moment
|
|
65
68
|
? t('RIGHT_NOW', 'Right Now')
|
|
@@ -219,7 +222,7 @@ const CartUI = (props: any) => {
|
|
|
219
222
|
</OSTable>
|
|
220
223
|
))
|
|
221
224
|
}
|
|
222
|
-
<Divider />
|
|
225
|
+
{/* <Divider /> */}
|
|
223
226
|
{cart?.subtotal_with_discount > 0 && cart?.discount > 0 && cart?.total >= 0 && (
|
|
224
227
|
<OSTable>
|
|
225
228
|
<OText size={12} lineHeight={18} numberOfLines={1}>{t('SUBTOTAL_WITH_DISCOUNT', 'Subtotal with discount')}</OText>
|
|
@@ -252,7 +255,7 @@ const CartUI = (props: any) => {
|
|
|
252
255
|
<OSRow>
|
|
253
256
|
<OText size={12} lineHeight={18} numberOfLines={1}>
|
|
254
257
|
{fee.name || t('INHERIT_FROM_BUSINESS', 'Inherit from business')}{' '}
|
|
255
|
-
({parsePrice(fee?.fixed)} + {fee
|
|
258
|
+
({fee?.fixed > 0 && `${parsePrice(fee?.fixed)} + `}{fee.percentage}%){' '}
|
|
256
259
|
</OText>
|
|
257
260
|
<TouchableOpacity onPress={() => setOpenTaxModal({ open: true, data: fee, type: 'fee' })} >
|
|
258
261
|
<AntIcon name='infocirlceo' size={16} color={theme.colors.primary} />
|
|
@@ -329,7 +332,7 @@ const CartUI = (props: any) => {
|
|
|
329
332
|
<OText size={12} numberOfLines={1}>
|
|
330
333
|
{walletName[cart?.wallets?.find((wallet: any) => wallet.id === event.wallet_id)?.type]?.name}
|
|
331
334
|
</OText>
|
|
332
|
-
<OText size={12}>-{parsePrice(event.amount)}</OText>
|
|
335
|
+
<OText size={12}>-{parsePrice(event.amount, { isTruncable: true })}</OText>
|
|
333
336
|
</OSTable>
|
|
334
337
|
))}
|
|
335
338
|
{isCouponEnabled && !isCartPending && (
|
|
@@ -353,6 +356,24 @@ const CartUI = (props: any) => {
|
|
|
353
356
|
</OText>
|
|
354
357
|
</OSTable>
|
|
355
358
|
</OSTotal>
|
|
359
|
+
{placeSpotTypes.includes(orderState?.options?.type) && (
|
|
360
|
+
<OSTable style={{ marginTop: 15 }}>
|
|
361
|
+
<OText size={14} lineHeight={21} weight={'600'}>
|
|
362
|
+
{t('SPOT', 'Spot')}: {cart?.place?.name || t('NO_SELECTED', 'No selected')}
|
|
363
|
+
</OText>
|
|
364
|
+
<TouchableOpacity onPress={() => setOpenPlaceModal(true)}>
|
|
365
|
+
<OText
|
|
366
|
+
size={14}
|
|
367
|
+
lineHeight={21}
|
|
368
|
+
weight={'600'}
|
|
369
|
+
color={theme.colors.primary}
|
|
370
|
+
style={{ textDecorationLine: 'underline' }}
|
|
371
|
+
>
|
|
372
|
+
{t('EDIT', 'Edit')}
|
|
373
|
+
</OText>
|
|
374
|
+
</TouchableOpacity>
|
|
375
|
+
</OSTable>
|
|
376
|
+
)}
|
|
356
377
|
{cart?.status !== 2 && (
|
|
357
378
|
<OSTable>
|
|
358
379
|
<View style={{ width: '100%', marginTop: 20 }}>
|
|
@@ -434,14 +455,26 @@ const CartUI = (props: any) => {
|
|
|
434
455
|
products={cart?.products}
|
|
435
456
|
/>
|
|
436
457
|
</OModal>
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
458
|
+
<OModal
|
|
459
|
+
open={openPlaceModal}
|
|
460
|
+
title={t('CHOOSE_YOUR_SPOT', 'Choose your spot')}
|
|
461
|
+
onClose={() => setOpenPlaceModal(false)}
|
|
462
|
+
entireModal
|
|
463
|
+
>
|
|
464
|
+
<PlaceSpot
|
|
465
|
+
cart={cart}
|
|
466
|
+
isOpenPlaceSpot={openPlaceModal}
|
|
467
|
+
setOpenPlaceModal={setOpenPlaceModal}
|
|
444
468
|
/>
|
|
469
|
+
</OModal>
|
|
470
|
+
<OAlert
|
|
471
|
+
open={confirm.open}
|
|
472
|
+
title={confirm.title}
|
|
473
|
+
content={confirm.content}
|
|
474
|
+
onAccept={confirm.handleOnAccept}
|
|
475
|
+
onCancel={() => setConfirm({ ...confirm, open: false, title: null })}
|
|
476
|
+
onClose={() => setConfirm({ ...confirm, open: false, title: null })}
|
|
477
|
+
/>
|
|
445
478
|
</CContainer>
|
|
446
479
|
)
|
|
447
480
|
}
|
|
@@ -39,7 +39,8 @@ import {
|
|
|
39
39
|
ChCart,
|
|
40
40
|
DeliveryOptionsContainer,
|
|
41
41
|
DeliveryOptionItem,
|
|
42
|
-
WalletPaymentOptionContainer
|
|
42
|
+
WalletPaymentOptionContainer,
|
|
43
|
+
CartHeader
|
|
43
44
|
} from './styles';
|
|
44
45
|
import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
|
|
45
46
|
|
|
@@ -131,9 +132,11 @@ const CheckoutUI = (props: any) => {
|
|
|
131
132
|
const [isDeliveryOptionModalVisible, setIsDeliveryOptionModalVisible] = useState(false)
|
|
132
133
|
const [showGateway, setShowGateway] = useState<any>({ closedByUsed: false, open: false });
|
|
133
134
|
const [webviewPaymethod, setWebviewPaymethod] = useState<any>(null)
|
|
134
|
-
|
|
135
|
-
|
|
135
|
+
|
|
136
|
+
const placeSpotTypes = [3, 4]
|
|
136
137
|
const isWalletEnabled = configs?.wallet_enabled?.value === '1' && (configs?.wallet_cash_enabled?.value === '1' || configs?.wallet_credit_point_enabled?.value === '1')
|
|
138
|
+
const isPreOrder = configs?.preorder_status_enabled?.value === '1'
|
|
139
|
+
const isDisabledButtonPlace = loading || !cart?.valid || (!paymethodSelected && cart?.balance > 0) || placing || errorCash || cart?.subtotal < cart?.minimum || (placeSpotTypes.includes(options?.type) && !cart?.place)
|
|
137
140
|
|
|
138
141
|
const driverTipsOptions = typeof configs?.driver_tip_options?.value === 'string'
|
|
139
142
|
? JSON.parse(configs?.driver_tip_options?.value) || []
|
|
@@ -149,6 +152,12 @@ const CheckoutUI = (props: any) => {
|
|
|
149
152
|
}
|
|
150
153
|
})
|
|
151
154
|
|
|
155
|
+
const handleMomentClick = () => {
|
|
156
|
+
if (isPreOrder) {
|
|
157
|
+
navigation.navigate('MomentOption')
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
152
161
|
const handlePlaceOrder = () => {
|
|
153
162
|
if (!userErrors.length) {
|
|
154
163
|
handlerClickPlaceOrder && handlerClickPlaceOrder()
|
|
@@ -193,8 +202,8 @@ const CheckoutUI = (props: any) => {
|
|
|
193
202
|
if (
|
|
194
203
|
!user?.cellphone &&
|
|
195
204
|
((validationFields?.fields?.checkout?.cellphone?.enabled &&
|
|
196
|
-
|
|
197
|
-
|
|
205
|
+
validationFields?.fields?.checkout?.cellphone?.required) ||
|
|
206
|
+
configs?.verification_phone_required?.value === '1')
|
|
198
207
|
) {
|
|
199
208
|
errors.push(t('VALIDATION_ERROR_MOBILE_PHONE_REQUIRED', 'The field Phone number is required'))
|
|
200
209
|
}
|
|
@@ -260,21 +269,21 @@ const CheckoutUI = (props: any) => {
|
|
|
260
269
|
/>
|
|
261
270
|
</CHMomentWrapper>
|
|
262
271
|
<CHMomentWrapper
|
|
263
|
-
onPress={() =>
|
|
272
|
+
onPress={() => handleMomentClick()}
|
|
264
273
|
disabled={loading}
|
|
265
274
|
>
|
|
266
275
|
<OText size={12} numberOfLines={1} ellipsizeMode='tail' color={theme.colors.textSecondary}>
|
|
267
276
|
{options?.moment
|
|
268
|
-
? parseDate(options?.moment, {
|
|
269
|
-
outputFormat: configs?.format_time?.value === '12' ? 'MM/DD hh:mma' : 'MM/DD HH:mm'
|
|
270
|
-
})
|
|
277
|
+
? parseDate(options?.moment, { outputFormat: configs?.dates_moment_format?.value })
|
|
271
278
|
: t('ASAP_ABBREVIATION', 'ASAP')}
|
|
272
279
|
</OText>
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
280
|
+
{isPreOrder && (
|
|
281
|
+
<OIcon
|
|
282
|
+
src={theme.images.general.arrow_down}
|
|
283
|
+
width={10}
|
|
284
|
+
style={{ marginStart: 8 }}
|
|
285
|
+
/>
|
|
286
|
+
)}
|
|
278
287
|
</CHMomentWrapper>
|
|
279
288
|
</ChHeader>
|
|
280
289
|
<View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginTop: 18, marginHorizontal: -40 }} />
|
|
@@ -537,7 +546,6 @@ const CheckoutUI = (props: any) => {
|
|
|
537
546
|
onNavigationRedirect={onNavigationRedirect}
|
|
538
547
|
paySelected={paymethodSelected}
|
|
539
548
|
handlePaymentMethodClickCustom={handlePaymentMethodClick}
|
|
540
|
-
handlePlaceOrder={handlePlaceOrder}
|
|
541
549
|
/>
|
|
542
550
|
</ChPaymethods>
|
|
543
551
|
</ChSection>
|
|
@@ -563,9 +571,28 @@ const CheckoutUI = (props: any) => {
|
|
|
563
571
|
/>
|
|
564
572
|
) : (
|
|
565
573
|
<>
|
|
566
|
-
<
|
|
567
|
-
|
|
568
|
-
|
|
574
|
+
<CartHeader>
|
|
575
|
+
<OText
|
|
576
|
+
size={16}
|
|
577
|
+
lineHeight={24}
|
|
578
|
+
color={theme.colors.textNormal}
|
|
579
|
+
style={{ fontWeight: '500' }}
|
|
580
|
+
>
|
|
581
|
+
{t('MOBILE_FRONT_YOUR_ORDER', 'Your order')}
|
|
582
|
+
</OText>
|
|
583
|
+
<TouchableOpacity
|
|
584
|
+
onPress={() => onNavigationRedirect('Business', { store: cart?.business?.slug })}
|
|
585
|
+
>
|
|
586
|
+
<OText
|
|
587
|
+
size={10}
|
|
588
|
+
lineHeight={15}
|
|
589
|
+
color={theme.colors.primary}
|
|
590
|
+
style={{ textDecorationLine: 'underline' }}
|
|
591
|
+
>
|
|
592
|
+
{t('ADD_PRODUCTS', 'Add products')}
|
|
593
|
+
</OText>
|
|
594
|
+
</TouchableOpacity>
|
|
595
|
+
</CartHeader>
|
|
569
596
|
{props.isFranchiseApp && (
|
|
570
597
|
<TouchableOpacity
|
|
571
598
|
onPress={() => setOpenChangeStore(true)}
|
|
@@ -621,6 +648,14 @@ const CheckoutUI = (props: any) => {
|
|
|
621
648
|
{t('WARNING_INVALID_PRODUCTS', 'Some products are invalid, please check them.')}
|
|
622
649
|
</OText>
|
|
623
650
|
)}
|
|
651
|
+
{placeSpotTypes.includes(options?.type) && !cart?.place && (
|
|
652
|
+
<OText
|
|
653
|
+
color={theme.colors.error}
|
|
654
|
+
size={12}
|
|
655
|
+
>
|
|
656
|
+
{t('WARNING_PLACE_SPOT', 'Please, select your spot to place order.')}
|
|
657
|
+
</OText>
|
|
658
|
+
)}
|
|
624
659
|
</ChErrors>
|
|
625
660
|
</View>
|
|
626
661
|
)}
|
|
@@ -640,8 +675,8 @@ const CheckoutUI = (props: any) => {
|
|
|
640
675
|
{!cartState.loading && cart && cart?.status !== 2 && (
|
|
641
676
|
<FloatingButton
|
|
642
677
|
handleClick={() => handlePlaceOrder()}
|
|
643
|
-
isSecondaryBtn={
|
|
644
|
-
disabled={
|
|
678
|
+
isSecondaryBtn={isDisabledButtonPlace}
|
|
679
|
+
disabled={isDisabledButtonPlace}
|
|
645
680
|
btnText={cart?.subtotal >= cart?.minimum
|
|
646
681
|
? (
|
|
647
682
|
placing
|
|
@@ -105,3 +105,10 @@ export const DeliveryOptionItem = styled.View`
|
|
|
105
105
|
flex-direction: row;
|
|
106
106
|
background-color: ${(props : any) => props?.backgroundColor ?? '#fff'};
|
|
107
107
|
`;
|
|
108
|
+
|
|
109
|
+
export const CartHeader = styled.View`
|
|
110
|
+
align-items: center;
|
|
111
|
+
flex-direction: row;
|
|
112
|
+
justify-content: space-between;
|
|
113
|
+
margin-bottom: 10px;
|
|
114
|
+
`
|
|
@@ -63,7 +63,7 @@ const DriverTipsUI = (props: any) => {
|
|
|
63
63
|
return (
|
|
64
64
|
<DTContainer>
|
|
65
65
|
<DTWrapperTips>
|
|
66
|
-
{driverTipsOptions.map((option: any, i: number) => (
|
|
66
|
+
{driverTipsOptions.map((option: any, i: number) => (
|
|
67
67
|
<TouchableOpacity
|
|
68
68
|
key={i}
|
|
69
69
|
onPress={() => handlerChangeOption(option)}
|
|
@@ -65,18 +65,6 @@ const ForgotPasswordUI = (props: any) => {
|
|
|
65
65
|
}
|
|
66
66
|
}, [formState])
|
|
67
67
|
|
|
68
|
-
useEffect(() => {
|
|
69
|
-
if (Object.keys(errors).length > 0) {
|
|
70
|
-
// Convert all errors in one string to show in toast provider
|
|
71
|
-
const list = Object.values(errors)
|
|
72
|
-
let stringError = ''
|
|
73
|
-
list.map((item: any, i: number) => {
|
|
74
|
-
stringError += (i + 1) === list.length ? `- ${item.message}` : `- ${item.message}\n`
|
|
75
|
-
})
|
|
76
|
-
showToast(ToastType.Error, stringError)
|
|
77
|
-
}
|
|
78
|
-
}, [errors])
|
|
79
|
-
|
|
80
68
|
return (
|
|
81
69
|
<Container>
|
|
82
70
|
<NavBar
|
|
@@ -100,6 +88,14 @@ const ForgotPasswordUI = (props: any) => {
|
|
|
100
88
|
{t('FORGOT_PASSWORD_TEXT_MESSAGE', "Enter your email address and we'll sent a link to reset your password.")}
|
|
101
89
|
</OText>
|
|
102
90
|
<FormInput>
|
|
91
|
+
{errors?.email && (
|
|
92
|
+
<OText
|
|
93
|
+
size={14}
|
|
94
|
+
color={theme.colors.danger5}
|
|
95
|
+
weight={'normal'}>
|
|
96
|
+
{errors?.email?.message}{errors?.email?.type === 'required' && '*'}
|
|
97
|
+
</OText>
|
|
98
|
+
)}
|
|
103
99
|
<Controller
|
|
104
100
|
control={control}
|
|
105
101
|
render={({ onChange, value }: any) => (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { useEffect } from 'react';
|
|
2
2
|
import {
|
|
3
3
|
BusinessList as BusinessesListingController,
|
|
4
4
|
useLanguage,
|
|
@@ -18,7 +18,9 @@ const HighestRatedBusinessesUI = (props: HighestRatedBusinessesParams) => {
|
|
|
18
18
|
const {
|
|
19
19
|
businessesList,
|
|
20
20
|
onBusinessClick,
|
|
21
|
-
navigation
|
|
21
|
+
navigation,
|
|
22
|
+
isLoading,
|
|
23
|
+
getBusinesses
|
|
22
24
|
} = props;
|
|
23
25
|
|
|
24
26
|
const [, t] = useLanguage()
|
|
@@ -26,6 +28,11 @@ const HighestRatedBusinessesUI = (props: HighestRatedBusinessesParams) => {
|
|
|
26
28
|
|
|
27
29
|
const windowWidth = Dimensions.get('window').width;
|
|
28
30
|
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (businessesList?.loading || !isLoading) return
|
|
33
|
+
getBusinesses(true)
|
|
34
|
+
}, [isLoading])
|
|
35
|
+
|
|
29
36
|
return (
|
|
30
37
|
<>
|
|
31
38
|
<ListWrapper>
|
|
@@ -91,7 +91,9 @@ const OrdersOptionUI = (props: OrdersOptionParams) => {
|
|
|
91
91
|
{ key: 18, value: t('DRIVER_ALMOST_ARRIVED_TO_BUSINESS', 'Driver almost arrived to business') },
|
|
92
92
|
{ key: 19, value: t('DRIVER_ALMOST_ARRIVED_TO_CUSTOMER', 'Driver almost arrived to customer') },
|
|
93
93
|
{ key: 20, value: t('ORDER_CUSTOMER_ALMOST_ARRIVED_BUSINESS', 'Customer almost arrived to business') },
|
|
94
|
-
{ key: 21, value: t('ORDER_CUSTOMER_ARRIVED_BUSINESS', 'Customer arrived to business') }
|
|
94
|
+
{ key: 21, value: t('ORDER_CUSTOMER_ARRIVED_BUSINESS', 'Customer arrived to business') },
|
|
95
|
+
{ key: 22, value: t('ORDER_LOOKING_FOR_DRIVER', 'Looking for driver') },
|
|
96
|
+
{ key: 23, value: t('ORDER_DRIVER_ON_WAY', 'Driver on way') }
|
|
95
97
|
]
|
|
96
98
|
|
|
97
99
|
const objectStatus = orderStatus.find((o) => o.key === status)
|