ordering-ui-react-native 0.14.91 → 0.14.92-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 +1 -1
- package/src/components/Cart/index.tsx +1 -1
- package/src/components/Checkout/index.tsx +0 -1
- 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 +26 -5
- 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 +2 -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 +18 -68
- package/themes/business/src/components/OrdersOption/styles.tsx +2 -5
- package/themes/business/src/components/PreviousOrders/index.tsx +80 -23
- package/themes/business/src/types/index.tsx +4 -0
- 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/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 +36 -6
- package/themes/original/src/components/AddressForm/index.tsx +15 -10
- package/themes/original/src/components/AddressList/index.tsx +27 -1
- package/themes/original/src/components/AnalyticsSegment/index.tsx +127 -0
- package/themes/original/src/components/BusinessBasicInformation/index.tsx +75 -40
- package/themes/original/src/components/BusinessController/index.tsx +5 -4
- package/themes/original/src/components/BusinessMenuList/index.tsx +4 -2
- package/themes/original/src/components/BusinessPreorder/index.tsx +142 -121
- package/themes/original/src/components/BusinessProductsCategories/index.tsx +7 -5
- package/themes/original/src/components/BusinessProductsList/index.tsx +51 -7
- package/themes/original/src/components/BusinessProductsListing/index.tsx +20 -15
- package/themes/original/src/components/BusinessReviews/index.tsx +4 -3
- package/themes/original/src/components/BusinessesListing/index.tsx +23 -22
- package/themes/original/src/components/Cart/index.tsx +42 -9
- package/themes/original/src/components/CartContent/index.tsx +2 -2
- package/themes/original/src/components/Checkout/index.tsx +54 -30
- 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/LoginForm/index.tsx +83 -68
- package/themes/original/src/components/Messages/index.tsx +24 -21
- package/themes/original/src/components/Messages/styles.tsx +1 -3
- 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 +103 -124
- package/themes/original/src/components/OrderDetails/styles.tsx +3 -1
- package/themes/original/src/components/OrderProgress/index.tsx +2 -3
- package/themes/original/src/components/OrderSummary/index.tsx +34 -1
- package/themes/original/src/components/OrdersOption/index.tsx +16 -40
- package/themes/original/src/components/OrdersOption/styles.tsx +0 -5
- package/themes/original/src/components/PaymentOptions/index.tsx +24 -25
- 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 +154 -105
- package/themes/original/src/components/ProductForm/styles.tsx +5 -3
- package/themes/original/src/components/ProductOptionSubOption/index.tsx +6 -1
- 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/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 +16 -9
- 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/shared/HeaderTitle.tsx +20 -0
- package/themes/original/src/components/shared/index.tsx +2 -0
- package/themes/original/src/types/index.tsx +18 -8
- package/themes/single-business/src/components/OrderTypeSelector/index.tsx +5 -5
- package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
- package/src/components/StripeMethodForm/index.tsx +0 -163
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import React, { useState, useEffect } from 'react';
|
|
2
|
-
import { StyleSheet, TouchableOpacity, View } from 'react-native';
|
|
2
|
+
import { StyleSheet, TouchableOpacity, View, Platform, PlatformIOSStatic } from 'react-native';
|
|
3
3
|
import { useTheme } from 'styled-components/native';
|
|
4
4
|
import moment from 'moment'
|
|
5
|
-
import { useLanguage, useUtils } from 'ordering-components/native';
|
|
5
|
+
import { useLanguage, useUtils, useConfig } from 'ordering-components/native';
|
|
6
6
|
import { OButton, OIcon, OText } from '../shared';
|
|
7
7
|
import {
|
|
8
8
|
Card, Logo, Information, MyOrderOptions, NotificationIcon, AcceptOrRejectOrder, Timestatus
|
|
9
9
|
} from './styles';
|
|
10
10
|
import EntypoIcon from 'react-native-vector-icons/Entypo'
|
|
11
|
+
import { DeviceOrientationMethods } from '../../../../../src/hooks/DeviceOrientation'
|
|
12
|
+
import DeviceInfo from 'react-native-device-info';
|
|
13
|
+
|
|
14
|
+
const { useDeviceOrientation, PORTRAIT } = DeviceOrientationMethods
|
|
11
15
|
|
|
12
16
|
export const PreviousOrders = (props: any) => {
|
|
13
17
|
const {
|
|
@@ -17,25 +21,44 @@ export const PreviousOrders = (props: any) => {
|
|
|
17
21
|
handleClickOrder,
|
|
18
22
|
isLogisticOrder,
|
|
19
23
|
handleClickLogisticOrder,
|
|
20
|
-
slaSettingTime
|
|
24
|
+
slaSettingTime,
|
|
25
|
+
currentTabSelected,
|
|
26
|
+
currentOrdenSelected
|
|
21
27
|
} = props;
|
|
22
28
|
const [, t] = useLanguage();
|
|
23
29
|
const [{ parseDate, optimizeImage }] = useUtils();
|
|
30
|
+
const [configState] = useConfig()
|
|
24
31
|
const theme = useTheme();
|
|
25
|
-
const [
|
|
32
|
+
const [, setCurrentTime] = useState()
|
|
33
|
+
const [allowColumns, setAllowColumns] = useState({
|
|
34
|
+
timer: true,
|
|
35
|
+
slaBar: true,
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
const [orientationState] = useDeviceOrientation();
|
|
39
|
+
|
|
40
|
+
const IS_PORTRAIT = orientationState.orientation === PORTRAIT
|
|
41
|
+
|
|
42
|
+
const platformIOS = Platform as PlatformIOSStatic
|
|
43
|
+
const isIpad = platformIOS.isPad
|
|
44
|
+
const isTablet = DeviceInfo.isTablet();
|
|
26
45
|
|
|
27
46
|
const handlePressOrder = (order: any) => {
|
|
28
47
|
if (order?.locked && isLogisticOrder) return
|
|
29
48
|
handleClickOrder && handleClickOrder(order)
|
|
30
|
-
|
|
31
|
-
|
|
49
|
+
if (props.handleClickEvent) {
|
|
50
|
+
props.handleClickEvent({ ...order, isLogistic: isLogisticOrder })
|
|
51
|
+
} else {
|
|
52
|
+
onNavigationRedirect &&
|
|
53
|
+
onNavigationRedirect('OrderDetails', { order: { ...order, isLogistic: isLogisticOrder }, handleClickLogisticOrder });
|
|
54
|
+
}
|
|
32
55
|
};
|
|
33
56
|
|
|
34
57
|
const styles = StyleSheet.create({
|
|
35
58
|
cardButton: {
|
|
36
59
|
flex: 1,
|
|
37
|
-
|
|
38
|
-
marginBottom:
|
|
60
|
+
paddingVertical: (isIpad || isTablet) ? 20 : 0,
|
|
61
|
+
marginBottom: IS_PORTRAIT ? 25 : 0,
|
|
39
62
|
marginLeft: 3,
|
|
40
63
|
},
|
|
41
64
|
icon: {
|
|
@@ -76,23 +99,40 @@ export const PreviousOrders = (props: any) => {
|
|
|
76
99
|
},
|
|
77
100
|
});
|
|
78
101
|
|
|
79
|
-
const
|
|
102
|
+
const getDelayMinutes = (order: any) => {
|
|
80
103
|
// targetMin = delivery_datetime + eta_time - now()
|
|
104
|
+
const offset = 300
|
|
105
|
+
const cdtToutc = parseDate(moment(order?.delivery_datetime).add(offset, 'minutes'))
|
|
81
106
|
const _delivery = order?.delivery_datetime_utc
|
|
107
|
+
? parseDate(order?.delivery_datetime_utc)
|
|
108
|
+
: parseDate(cdtToutc)
|
|
82
109
|
const _eta = order?.eta_time
|
|
83
|
-
|
|
84
|
-
|
|
110
|
+
return moment(_delivery, 'YYYY-MM-DD hh:mm A').add(_eta, 'minutes').diff(moment().utc(), 'minutes')
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const displayDelayedTime = (order: any) => {
|
|
114
|
+
let tagetedMin = getDelayMinutes(order)
|
|
115
|
+
// get day, hour and minutes
|
|
116
|
+
const sign = tagetedMin >= 0 ? '' : '- '
|
|
117
|
+
tagetedMin = Math.abs(tagetedMin)
|
|
118
|
+
let day: string | number = Math.floor(tagetedMin / 1440)
|
|
85
119
|
const restMinOfTargetedMin = tagetedMin - 1440 * day
|
|
86
|
-
let restHours:
|
|
87
|
-
let restMins:
|
|
120
|
+
let restHours: string | number = Math.floor(restMinOfTargetedMin / 60)
|
|
121
|
+
let restMins: string | number = restMinOfTargetedMin - 60 * restHours
|
|
122
|
+
// make standard time format
|
|
123
|
+
day = day === 0 ? '' : day + 'day '
|
|
124
|
+
restHours = restHours < 10 ? '0' + restHours : restHours
|
|
125
|
+
restMins = restMins < 10 ? '0' + restMins : restMins
|
|
88
126
|
|
|
89
|
-
|
|
90
|
-
if (restHours < 10) restHours = ('0' + restHours)
|
|
91
|
-
if (restMins < 10) restMins = ('0' + restMins)
|
|
92
|
-
const finalTaget = day + 'day ' + restHours + ':' + restMins
|
|
127
|
+
const finalTaget = sign + day + restHours + ':' + restMins
|
|
93
128
|
return finalTaget
|
|
94
129
|
}
|
|
95
130
|
|
|
131
|
+
const getStatusClassName = (minutes: any) => {
|
|
132
|
+
if (isNaN(Number(minutes))) return 0
|
|
133
|
+
return minutes > 0 ? 'in_time' : minutes === 0 ? 'at_risk' : 'delayed'
|
|
134
|
+
}
|
|
135
|
+
|
|
96
136
|
useEffect(() => {
|
|
97
137
|
const interval = setInterval(() => {
|
|
98
138
|
const date: any = Date.now()
|
|
@@ -102,6 +142,15 @@ export const PreviousOrders = (props: any) => {
|
|
|
102
142
|
return () => clearInterval(interval)
|
|
103
143
|
}, [])
|
|
104
144
|
|
|
145
|
+
useEffect(() => {
|
|
146
|
+
const slaSettings = configState?.configs?.order_deadlines_enabled?.value === '1'
|
|
147
|
+
setAllowColumns({
|
|
148
|
+
...allowColumns,
|
|
149
|
+
timer: slaSettings,
|
|
150
|
+
slaBar: slaSettings
|
|
151
|
+
})
|
|
152
|
+
}, [configState.loading])
|
|
153
|
+
|
|
105
154
|
let hash: any = {};
|
|
106
155
|
|
|
107
156
|
return (
|
|
@@ -114,8 +163,9 @@ export const PreviousOrders = (props: any) => {
|
|
|
114
163
|
return (
|
|
115
164
|
<View
|
|
116
165
|
style={{
|
|
117
|
-
backgroundColor: order?.locked && isLogisticOrder ? '#ccc' : '#fff',
|
|
118
|
-
marginBottom: isLogisticOrder ? 10 : 0
|
|
166
|
+
backgroundColor: currentOrdenSelected === order?.id ? theme.colors.gray100 : order?.locked && isLogisticOrder ? '#ccc' : '#fff',
|
|
167
|
+
marginBottom: isLogisticOrder ? 10 : 0,
|
|
168
|
+
// justifyContent: 'center'
|
|
119
169
|
}}
|
|
120
170
|
key={order.id}
|
|
121
171
|
>
|
|
@@ -126,7 +176,9 @@ export const PreviousOrders = (props: any) => {
|
|
|
126
176
|
activeOpacity={1}
|
|
127
177
|
>
|
|
128
178
|
<Card key={order.id}>
|
|
129
|
-
|
|
179
|
+
{allowColumns?.slaBar && (
|
|
180
|
+
<Timestatus style={{ backgroundColor: getStatusClassName(getDelayMinutes(order)) === 'in_time' ? '#00D27A' : getStatusClassName(getDelayMinutes(order)) === 'at_risk' ? '#FFC700' : getStatusClassName(getDelayMinutes(order)) === 'delayed' ? '#E63757' : '' }} />
|
|
181
|
+
)}
|
|
130
182
|
{
|
|
131
183
|
order.business?.logo && (
|
|
132
184
|
<Logo style={styles.logo}>
|
|
@@ -159,7 +211,7 @@ export const PreviousOrders = (props: any) => {
|
|
|
159
211
|
/>
|
|
160
212
|
</NotificationIcon>
|
|
161
213
|
)}
|
|
162
|
-
<View style={{ flexDirection: 'row' }}>
|
|
214
|
+
<View style={{ flexDirection: 'row', flexWrap: 'wrap' }}>
|
|
163
215
|
<OText
|
|
164
216
|
style={styles.date}
|
|
165
217
|
color={theme.colors.unselectText}
|
|
@@ -169,9 +221,14 @@ export const PreviousOrders = (props: any) => {
|
|
|
169
221
|
{(order?.order_group_id && order?.order_group && isLogisticOrder ? `${order?.order_group?.orders?.length} ${t('ORDERS', 'Orders')}` : (t('NO', 'Order No.') + order.id)) + ' · '}
|
|
170
222
|
{order?.delivery_datetime_utc
|
|
171
223
|
? parseDate(order?.delivery_datetime_utc, { outputFormat: 'MM/DD/YY · HH:mm a' })
|
|
172
|
-
: parseDate(order?.delivery_datetime, { utc: false })}
|
|
224
|
+
: parseDate(order?.delivery_datetime, { utc: false })}
|
|
173
225
|
</OText>
|
|
174
|
-
|
|
226
|
+
{((currentTabSelected === 'pending' || currentTabSelected === 'inProgress') && allowColumns?.timer) && (
|
|
227
|
+
<>
|
|
228
|
+
<OText> · </OText>
|
|
229
|
+
<OText style={styles.date} color={getStatusClassName(getDelayMinutes(order)) === 'in_time' ? '#00D27A' : getStatusClassName(getDelayMinutes(order)) === 'at_risk' ? '#FFC700' : getStatusClassName(getDelayMinutes(order)) === 'delayed' ? '#E63757' : ''} >{displayDelayedTime(order)}</OText>
|
|
230
|
+
</>
|
|
231
|
+
)}
|
|
175
232
|
</View>
|
|
176
233
|
{!isLogisticOrder && (
|
|
177
234
|
<MyOrderOptions>
|
|
@@ -197,7 +197,7 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
|
|
|
197
197
|
{isFarAway && (
|
|
198
198
|
<FarAwayMessage style={styles.farAwayMsg}>
|
|
199
199
|
<Ionicons name='md-warning-outline' style={styles.iconStyle} />
|
|
200
|
-
<OText size={12} numberOfLines={1} ellipsizeMode={'tail'} color={theme.colors.textNormal}>{t('YOU_ARE_FAR_FROM_ADDRESS', '
|
|
200
|
+
<OText size={12} numberOfLines={1} ellipsizeMode={'tail'} color={theme.colors.textNormal}>{t('YOU_ARE_FAR_FROM_ADDRESS', 'Your are far from this address')}</OText>
|
|
201
201
|
</FarAwayMessage>
|
|
202
202
|
)}
|
|
203
203
|
{!auth && (
|
|
@@ -410,8 +410,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
410
410
|
textInputProps={{
|
|
411
411
|
returnKeyType: 'next',
|
|
412
412
|
onSubmitEditing: () => inputRef?.current?.focus?.(),
|
|
413
|
-
style: { borderWidth: 0, fontSize: 12 }
|
|
414
|
-
maxLength: 10
|
|
413
|
+
style: { borderWidth: 0, fontSize: 12 }
|
|
415
414
|
}}
|
|
416
415
|
textWrapStyle={{ borderColor: theme.colors.clear, borderWidth: 0, height: 40, paddingStart: 0 }}
|
|
417
416
|
/>
|
|
@@ -155,7 +155,7 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
|
|
|
155
155
|
{isFarAway && (
|
|
156
156
|
<FarAwayMessage style={styles.farAwayMsg}>
|
|
157
157
|
<Ionicons name='md-warning-outline' style={styles.iconStyle} />
|
|
158
|
-
<OText size={12} numberOfLines={1} ellipsizeMode={'tail'} color={theme.colors.textNormal}>{t('YOU_ARE_FAR_FROM_ADDRESS', '
|
|
158
|
+
<OText size={12} numberOfLines={1} ellipsizeMode={'tail'} color={theme.colors.textNormal}>{t('YOU_ARE_FAR_FROM_ADDRESS', 'Your are far from this address')}</OText>
|
|
159
159
|
</FarAwayMessage>
|
|
160
160
|
)}
|
|
161
161
|
<View style={styles.wrapperOrderOptions}>
|
package/themes/kiosk/index.tsx
CHANGED
|
@@ -14,6 +14,7 @@ import { LanguageSelector } from './src/components/LanguageSelector'
|
|
|
14
14
|
import { LoginForm } from './src/components/LoginForm'
|
|
15
15
|
import { LogoutPopup } from './src/components/LogoutPopup'
|
|
16
16
|
import Navbar from './src/components/NavBar'
|
|
17
|
+
import { NetworkError } from './src/components/NetworkError'
|
|
17
18
|
import { NotFoundSource } from './src/components/NotFoundSource'
|
|
18
19
|
import OptionCard from './src/components/OptionCard'
|
|
19
20
|
import { OrderDetails } from './src/components/OrderDetails'
|
|
@@ -82,6 +83,7 @@ export {
|
|
|
82
83
|
LoginForm,
|
|
83
84
|
LogoutPopup,
|
|
84
85
|
Navbar,
|
|
86
|
+
NetworkError,
|
|
85
87
|
NotFoundSource,
|
|
86
88
|
OptionCard,
|
|
87
89
|
OrderDetails,
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
BusinessController as BusinessSingleCard,
|
|
7
7
|
useUtils,
|
|
8
8
|
} from 'ordering-components/native';
|
|
9
|
+
import FastImage from 'react-native-fast-image'
|
|
9
10
|
|
|
10
11
|
import { Card, BusinessLogo } from './styles';
|
|
11
12
|
|
|
@@ -26,6 +27,16 @@ export const BusinessControllerUI = (props: any) => {
|
|
|
26
27
|
alignItems: 'center',
|
|
27
28
|
textAlign: 'center',
|
|
28
29
|
marginTop: 10
|
|
30
|
+
},
|
|
31
|
+
logoStyle: {
|
|
32
|
+
width: 120,
|
|
33
|
+
height: 120,
|
|
34
|
+
borderRadius: 8,
|
|
35
|
+
borderWidth: 1,
|
|
36
|
+
borderColor: theme.colors.border,
|
|
37
|
+
flexDirection: 'column',
|
|
38
|
+
justifyContent: 'center',
|
|
39
|
+
alignItems: 'center',
|
|
29
40
|
}
|
|
30
41
|
});
|
|
31
42
|
|
|
@@ -39,12 +50,22 @@ export const BusinessControllerUI = (props: any) => {
|
|
|
39
50
|
activeOpacity={1}
|
|
40
51
|
onPress={() => handleBusinessClick(business)}
|
|
41
52
|
>
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
53
|
+
{business?.logo ? (
|
|
54
|
+
<FastImage
|
|
55
|
+
style={styles.logoStyle}
|
|
56
|
+
source={{
|
|
57
|
+
uri: business?.logo,
|
|
58
|
+
priority: FastImage.priority.high,
|
|
59
|
+
cache:FastImage.cacheControl.web
|
|
60
|
+
}}
|
|
61
|
+
resizeMode={FastImage.resizeMode.contain}
|
|
62
|
+
/>
|
|
63
|
+
) : (
|
|
64
|
+
<BusinessLogo
|
|
65
|
+
source={theme.images.dummies.businessLogo}
|
|
66
|
+
resizeMode='contain'
|
|
67
|
+
/>
|
|
68
|
+
)}
|
|
48
69
|
<OText
|
|
49
70
|
size={WIDTH_SCREEN * 0.012}
|
|
50
71
|
numberOfLines={2}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
|
-
import { View, StyleSheet, ScrollView, TouchableOpacity } from 'react-native'
|
|
2
|
+
import { View, StyleSheet, ScrollView, TouchableOpacity, ImageBackground } from 'react-native'
|
|
3
3
|
import { BusinessAndProductList, useLanguage } from 'ordering-components/native'
|
|
4
4
|
import { BusinessProductsListingParams, Business } from '../../types'
|
|
5
5
|
import { OCard, OText, OIcon } from '../shared'
|
|
@@ -7,6 +7,7 @@ import GridContainer from '../../layouts/GridContainer'
|
|
|
7
7
|
import Spinner from 'react-native-loading-spinner-overlay';
|
|
8
8
|
import { LANDSCAPE, useDeviceOrientation } from '../../../../../src/hooks/DeviceOrientation';
|
|
9
9
|
import styled, { useTheme } from 'styled-components/native';
|
|
10
|
+
import FastImage from 'react-native-fast-image'
|
|
10
11
|
|
|
11
12
|
const BusinessProductsListingUI = (props: BusinessProductsListingParams) => {
|
|
12
13
|
const {navigation, businessState, resetInactivityTimeout, clearInactivityTimeout, bottomSheetVisibility } = props;
|
|
@@ -38,7 +39,7 @@ const BusinessProductsListingUI = (props: BusinessProductsListingParams) => {
|
|
|
38
39
|
},
|
|
39
40
|
});
|
|
40
41
|
|
|
41
|
-
const _categories: any = business?.
|
|
42
|
+
const _categories: any = business?.categories;
|
|
42
43
|
let _promos: any = [];
|
|
43
44
|
_categories?.forEach((categ: any) => {
|
|
44
45
|
const _featuredProds = categ?.products?.filter(
|
|
@@ -59,17 +60,17 @@ const BusinessProductsListingUI = (props: BusinessProductsListingParams) => {
|
|
|
59
60
|
);
|
|
60
61
|
|
|
61
62
|
const RenderCategories = ({ item, cardStyle, widthScreen }: any) => {
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
63
|
+
const stylesCat = StyleSheet.create({
|
|
64
|
+
categoryStyle: {
|
|
65
|
+
height: 150,
|
|
66
|
+
borderRadius: 10,
|
|
67
|
+
padding: 10,
|
|
68
|
+
flexDirection: 'column',
|
|
69
|
+
justifyContent: 'center',
|
|
70
|
+
alignItems: 'center',
|
|
71
|
+
}
|
|
72
|
+
})
|
|
73
|
+
|
|
73
74
|
const WrapText = styled.View`
|
|
74
75
|
height: 90px;
|
|
75
76
|
display: flex;
|
|
@@ -78,6 +79,25 @@ const BusinessProductsListingUI = (props: BusinessProductsListingParams) => {
|
|
|
78
79
|
border-radius: 10px;
|
|
79
80
|
`
|
|
80
81
|
|
|
82
|
+
const Category = (props: any) => {
|
|
83
|
+
const imageProps = {
|
|
84
|
+
style: props.style,
|
|
85
|
+
source: props.source,
|
|
86
|
+
resizeMode: props.resizeMode,
|
|
87
|
+
}
|
|
88
|
+
return (
|
|
89
|
+
props.uri ? (
|
|
90
|
+
<FastImage {...imageProps}>
|
|
91
|
+
{props.children}
|
|
92
|
+
</FastImage>
|
|
93
|
+
) : (
|
|
94
|
+
<ImageBackground {...imageProps}>
|
|
95
|
+
{props.children}
|
|
96
|
+
</ImageBackground>
|
|
97
|
+
)
|
|
98
|
+
)
|
|
99
|
+
}
|
|
100
|
+
|
|
81
101
|
return (
|
|
82
102
|
<TouchableOpacity
|
|
83
103
|
key={item.id}
|
|
@@ -92,11 +112,17 @@ const BusinessProductsListingUI = (props: BusinessProductsListingParams) => {
|
|
|
92
112
|
}}
|
|
93
113
|
>
|
|
94
114
|
<Category
|
|
95
|
-
style={cardStyle}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
115
|
+
style={{ ...cardStyle, ...stylesCat.categoryStyle, width: widthScreen * 0.45 }}
|
|
116
|
+
uri={!!item.images}
|
|
117
|
+
source={!!item.images
|
|
118
|
+
? {
|
|
119
|
+
uri: item.images,
|
|
120
|
+
priority: FastImage.priority.high,
|
|
121
|
+
cache:FastImage.cacheControl.web
|
|
122
|
+
}
|
|
123
|
+
: theme.images.categories.all
|
|
124
|
+
}
|
|
125
|
+
resizeMode={FastImage.resizeMode.cover}
|
|
100
126
|
>
|
|
101
127
|
{item?.inventoried && (
|
|
102
128
|
<View style={styles.soldOut}>
|
|
@@ -111,7 +137,6 @@ const BusinessProductsListingUI = (props: BusinessProductsListingParams) => {
|
|
|
111
137
|
mLeft={0}
|
|
112
138
|
size={32}
|
|
113
139
|
numberOfLines={1}
|
|
114
|
-
// mBottom={8}
|
|
115
140
|
style={{...props?.titleStyle}}
|
|
116
141
|
weight="bold"
|
|
117
142
|
>
|
|
@@ -121,7 +146,6 @@ const BusinessProductsListingUI = (props: BusinessProductsListingParams) => {
|
|
|
121
146
|
<OText
|
|
122
147
|
color={theme.colors.white}
|
|
123
148
|
numberOfLines={1}
|
|
124
|
-
// mBottom={4}
|
|
125
149
|
size={18}
|
|
126
150
|
style={{...props?.descriptionStyle}}
|
|
127
151
|
weight="400"
|
|
@@ -161,7 +185,7 @@ const BusinessProductsListingUI = (props: BusinessProductsListingParams) => {
|
|
|
161
185
|
const _renderCategories = (): React.ReactElement => (
|
|
162
186
|
<>
|
|
163
187
|
{_renderTitle(t('CATEGORIES', 'Categories'))}
|
|
164
|
-
<GridContainer
|
|
188
|
+
<GridContainer
|
|
165
189
|
style={{
|
|
166
190
|
paddingLeft: orientationState?.orientation === LANDSCAPE
|
|
167
191
|
? bottomSheetVisibility ? orientationState?.dimensions?.width * 0.004 :orientationState?.dimensions?.width * 0.008
|
|
@@ -171,9 +195,12 @@ const BusinessProductsListingUI = (props: BusinessProductsListingParams) => {
|
|
|
171
195
|
{_categories && _categories.map((category: any) => (
|
|
172
196
|
<OCard
|
|
173
197
|
key={category.id}
|
|
198
|
+
isCentered
|
|
199
|
+
isUri={!!category.image}
|
|
174
200
|
title={category?.name || ''}
|
|
175
|
-
image={{uri: category
|
|
201
|
+
image={category.image ? {uri: category.image} : theme.images.categories.all}
|
|
176
202
|
style={{
|
|
203
|
+
borderRadius: 10,
|
|
177
204
|
width:
|
|
178
205
|
orientationState?.orientation === LANDSCAPE
|
|
179
206
|
? bottomSheetVisibility ? orientationState?.dimensions?.width * 0.145 :orientationState?.dimensions?.width * 0.16
|
|
@@ -183,8 +210,8 @@ const BusinessProductsListingUI = (props: BusinessProductsListingParams) => {
|
|
|
183
210
|
resetInactivityTimeout()
|
|
184
211
|
navigation.navigate('Category', {
|
|
185
212
|
category,
|
|
186
|
-
categories: business
|
|
187
|
-
businessId: business?.
|
|
213
|
+
categories: business?.categories,
|
|
214
|
+
businessId: business?.id,
|
|
188
215
|
businessSlug: business?.slug,
|
|
189
216
|
clearInactivityTimeout,
|
|
190
217
|
resetInactivityTimeout,
|
|
@@ -379,7 +379,7 @@ const CartUI = (props: any) => {
|
|
|
379
379
|
<ProductForm
|
|
380
380
|
productCart={curProduct}
|
|
381
381
|
businessSlug={cart?.business?.slug}
|
|
382
|
-
businessId={
|
|
382
|
+
businessId={cart?.business_id}
|
|
383
383
|
categoryId={curProduct?.category_id}
|
|
384
384
|
productId={curProduct?.id}
|
|
385
385
|
onSave={handlerProductAction}
|
|
@@ -179,7 +179,7 @@ const CartBottomSheetUI = (props: CartBottomSheetUIProps): React.ReactElement |
|
|
|
179
179
|
<ProductForm
|
|
180
180
|
productCart={curProduct}
|
|
181
181
|
businessSlug={cart?.business?.slug}
|
|
182
|
-
businessId={
|
|
182
|
+
businessId={cart?.business_id}
|
|
183
183
|
categoryId={curProduct?.category_id}
|
|
184
184
|
productId={curProduct?.id}
|
|
185
185
|
onSave={handlerProductAction}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { useEffect, useState } from 'react';
|
|
2
2
|
import { useLanguage } from 'ordering-components/native';
|
|
3
|
-
|
|
3
|
+
import { useCartBottomSheet } from '../../providers/CartBottomSheetProvider';
|
|
4
4
|
import { CCNotCarts } from './styles';
|
|
5
5
|
|
|
6
6
|
import { Cart } from '../Cart';
|
|
@@ -22,6 +22,7 @@ export const CartContent = (props: any) => {
|
|
|
22
22
|
|
|
23
23
|
const [, t] = useLanguage()
|
|
24
24
|
const [isCartsLoading, setIsCartsLoading] = useState(false)
|
|
25
|
+
const [, { hideCartBottomSheet }] = useCartBottomSheet();
|
|
25
26
|
|
|
26
27
|
const cartProps = {
|
|
27
28
|
navigation,
|
|
@@ -33,6 +34,15 @@ export const CartContent = (props: any) => {
|
|
|
33
34
|
resetInactivityTimeout,
|
|
34
35
|
}
|
|
35
36
|
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
if (!cart && showNotFound) {
|
|
39
|
+
navigation?.canGoBack()
|
|
40
|
+
? navigation.goBack()
|
|
41
|
+
: props.onNavigationRedirect && props.onNavigationRedirect('Business')
|
|
42
|
+
hideCartBottomSheet()
|
|
43
|
+
}
|
|
44
|
+
}, [cart])
|
|
45
|
+
|
|
36
46
|
const content = (
|
|
37
47
|
<>
|
|
38
48
|
{(isOrderStateCarts && cart) && (
|
|
@@ -46,13 +56,13 @@ export const CartContent = (props: any) => {
|
|
|
46
56
|
}
|
|
47
57
|
</>
|
|
48
58
|
)}
|
|
49
|
-
{(!cart && showNotFound) && (
|
|
59
|
+
{/* {(!cart && showNotFound) && (
|
|
50
60
|
<CCNotCarts>
|
|
51
61
|
<OText size={24} style={{ textAlign: 'center' }}>
|
|
52
62
|
{t('CARTS_NOT_FOUND', 'You don\'t have carts available')}
|
|
53
63
|
</OText>
|
|
54
64
|
</CCNotCarts>
|
|
55
|
-
)}
|
|
65
|
+
)} */}
|
|
56
66
|
<Spinner visible={isCartsLoading} />
|
|
57
67
|
</>
|
|
58
68
|
)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React, { useState } from 'react';
|
|
2
|
-
import { View, Animated, TouchableOpacity } from 'react-native';
|
|
2
|
+
import { View, Animated, TouchableOpacity, ImageBackground } from 'react-native';
|
|
3
3
|
import { useLanguage, useUtils } from 'ordering-components/native';
|
|
4
|
+
import FastImage from 'react-native-fast-image'
|
|
4
5
|
|
|
5
6
|
import {
|
|
6
7
|
StyledCartItem,
|
|
@@ -70,13 +71,24 @@ const CartItem = (props: CartItemProps) => {
|
|
|
70
71
|
>
|
|
71
72
|
<StyledCartItem>
|
|
72
73
|
<View style={{ flexDirection: 'row' }}>
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
74
|
+
{product?.images ? (
|
|
75
|
+
<FastImage
|
|
76
|
+
style={{ height: 60, width: 80, borderRadius: 6 }}
|
|
77
|
+
source={{
|
|
78
|
+
uri: product?.images,
|
|
79
|
+
priority: FastImage.priority.normal,
|
|
80
|
+
// cache:FastImage.cacheControl.web
|
|
81
|
+
}}
|
|
82
|
+
resizeMode={FastImage.resizeMode.cover}
|
|
83
|
+
/>
|
|
84
|
+
) : (
|
|
85
|
+
<ImageBackground
|
|
86
|
+
style={{ height: 60, width: 80, borderRadius: 6 }}
|
|
87
|
+
source={theme.images.dummies.product}
|
|
88
|
+
imageStyle={{ borderRadius: 6 }}
|
|
89
|
+
resizeMode='cover'
|
|
90
|
+
/>
|
|
91
|
+
)}
|
|
80
92
|
|
|
81
93
|
<View style={{ flexDirection: 'column', justifyContent: 'space-evenly', marginHorizontal: 15, marginTop: 10 }}>
|
|
82
94
|
<View>
|
|
@@ -156,13 +156,17 @@ const CategoriesMenu = (props: any): React.ReactElement => {
|
|
|
156
156
|
<OCard
|
|
157
157
|
key={product.id}
|
|
158
158
|
title={product?.name}
|
|
159
|
-
|
|
159
|
+
isUri={!!product.images}
|
|
160
|
+
image={product.images ? {uri: product.images} : theme.images.dummies.product}
|
|
161
|
+
price={parsePrice(product?.price)}
|
|
162
|
+
description={product?.description}
|
|
163
|
+
prevPrice={product?.offer_price > 0 && parsePrice(product?.offer_price)}
|
|
160
164
|
style={{
|
|
165
|
+
borderRadius: 10,
|
|
161
166
|
width: orientationState?.orientation === LANDSCAPE
|
|
162
167
|
? bottomSheetVisibility ? orientationState?.dimensions?.width * 0.145 :orientationState?.dimensions?.width * 0.16
|
|
163
168
|
: orientationState?.dimensions?.width * 0.20
|
|
164
169
|
}}
|
|
165
|
-
titleStyle={{marginTop: Platform.OS === 'ios' ? orientationState?.orientation === LANDSCAPE ? orientationState?.dimensions.height * 0.05 : orientationState?.dimensions.width * 0.05 : 0}}
|
|
166
170
|
onPress={() => {
|
|
167
171
|
resetInactivityTimeout()
|
|
168
172
|
if (isDrawer) {
|
|
@@ -176,9 +180,6 @@ const CategoriesMenu = (props: any): React.ReactElement => {
|
|
|
176
180
|
});
|
|
177
181
|
}
|
|
178
182
|
}}
|
|
179
|
-
{...(!!product?.description && { description: product?.description } )}
|
|
180
|
-
{...(!!product?.price && { price: parsePrice(product?.price) } )}
|
|
181
|
-
{...(product?.in_offer && { prevPrice: `$${product?.offer_price}` } )}
|
|
182
183
|
/>
|
|
183
184
|
))}
|
|
184
185
|
</GridContainer>
|
|
@@ -212,6 +213,7 @@ const CategoriesMenu = (props: any): React.ReactElement => {
|
|
|
212
213
|
businessId={parseInt(businessId, 10)}
|
|
213
214
|
businessSlug={businessSlug}
|
|
214
215
|
onSave={() => {
|
|
216
|
+
showCartBottomSheet()
|
|
215
217
|
setDrawerValues({ isOpen: !drawerState.isOpen, data: null })
|
|
216
218
|
}}
|
|
217
219
|
navigation={navigation}
|