ordering-ui-react-native 0.15.0 → 0.15.1-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 +7 -3
- package/src/DeliveryApp.tsx +32 -1
- 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/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 +25 -4
- 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/types/index.tsx +2 -9
- package/src/utils/index.tsx +2 -1
- package/themes/business/index.tsx +2 -0
- package/themes/business/src/components/Chat/index.tsx +32 -31
- 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 +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 +70 -116
- package/themes/business/src/components/OrdersOption/styles.tsx +2 -5
- package/themes/business/src/components/PreviousOrders/index.tsx +82 -23
- 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 +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/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/original/index.tsx +179 -0
- 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 +100 -45
- package/themes/original/src/components/BusinessBasicInformation/styles.tsx +28 -1
- package/themes/original/src/components/BusinessController/index.tsx +32 -21
- package/themes/original/src/components/BusinessListingSearch/index.tsx +7 -3
- package/themes/original/src/components/BusinessMenuList/index.tsx +14 -5
- 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 +3 -3
- package/themes/original/src/components/BusinessProductsListing/index.tsx +23 -30
- package/themes/original/src/components/BusinessReviews/index.tsx +8 -28
- package/themes/original/src/components/BusinessesListing/index.tsx +39 -52
- package/themes/original/src/components/Cart/index.tsx +40 -9
- package/themes/original/src/components/CartContent/index.tsx +2 -2
- package/themes/original/src/components/Checkout/index.tsx +58 -33
- 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 +105 -90
- package/themes/original/src/components/LoginForm/index.tsx +156 -70
- package/themes/original/src/components/LoginForm/styles.tsx +6 -1
- package/themes/original/src/components/Messages/index.tsx +52 -45
- 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/OrderDetails/index.tsx +102 -125
- package/themes/original/src/components/OrderDetails/styles.tsx +3 -1
- package/themes/original/src/components/OrderProgress/index.tsx +6 -7
- package/themes/original/src/components/OrderProgress/styles.tsx +1 -0
- package/themes/original/src/components/OrderSummary/index.tsx +34 -1
- package/themes/original/src/components/OrdersOption/index.tsx +15 -46
- package/themes/original/src/components/OrdersOption/styles.tsx +0 -6
- package/themes/original/src/components/PaymentOptionWallet/index.tsx +6 -2
- 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 +19 -13
- package/themes/original/src/components/ProductForm/index.tsx +157 -108
- 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/ReviewOrder/index.tsx +10 -9
- package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
- package/themes/original/src/components/SignupForm/index.tsx +173 -154
- package/themes/original/src/components/SingleProductCard/index.tsx +1 -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 +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 -11
- 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 +21 -0
- package/themes/original/src/components/shared/index.tsx +2 -0
- package/themes/original/src/types/index.tsx +64 -22
- 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 -168
|
@@ -5,8 +5,6 @@ import { useTheme } from 'styled-components/native';
|
|
|
5
5
|
import { OIcon, OText, OModal } from '../shared';
|
|
6
6
|
import { BusinessBasicInformationParams } from '../../types';
|
|
7
7
|
import { convertHoursToMinutes } from '../../utils';
|
|
8
|
-
import { BusinessInformation } from '../BusinessInformation';
|
|
9
|
-
import { BusinessReviews } from '../BusinessReviews';
|
|
10
8
|
import dayjs from 'dayjs';
|
|
11
9
|
import timezone from 'dayjs/plugin/timezone';
|
|
12
10
|
import isBetween from 'dayjs/plugin/isBetween';
|
|
@@ -22,14 +20,19 @@ import {
|
|
|
22
20
|
BusinessInfoItem,
|
|
23
21
|
WrapReviews,
|
|
24
22
|
WrapBusinessInfo,
|
|
23
|
+
TitleWrapper,
|
|
24
|
+
RibbonBox
|
|
25
25
|
} from './styles';
|
|
26
26
|
import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
|
|
27
27
|
const types = ['food', 'laundry', 'alcohol', 'groceries'];
|
|
28
28
|
|
|
29
|
+
let BusinessInformation: null | React.ElementType = null
|
|
30
|
+
let BusinessReviews: null | React.ElementType = null
|
|
31
|
+
|
|
29
32
|
export const BusinessBasicInformation = (
|
|
30
33
|
props: BusinessBasicInformationParams,
|
|
31
34
|
) => {
|
|
32
|
-
const { navigation, businessState, isBusinessInfoShow, logo, header } = props;
|
|
35
|
+
const { navigation, businessState, isBusinessInfoShow, logo, header, isPreOrder } = props;
|
|
33
36
|
const { business, loading } = businessState;
|
|
34
37
|
|
|
35
38
|
const theme = useTheme();
|
|
@@ -38,6 +41,25 @@ export const BusinessBasicInformation = (
|
|
|
38
41
|
const [{ parsePrice, parseDistance, optimizeImage }] = useUtils();
|
|
39
42
|
const [openBusinessInformation, setOpenBusinessInformation] = useState(false);
|
|
40
43
|
const [openBusinessReviews, setOpenBusinessReviews] = useState(false);
|
|
44
|
+
const [businessInformationObtained, setBusinessInformationObtained] = useState(false)
|
|
45
|
+
const [businessReviewsObtained, setBusinessReviewsObtainedbtained] = useState(false)
|
|
46
|
+
|
|
47
|
+
const handleClickBusinessInformation = () => {
|
|
48
|
+
if (!businessInformationObtained) {
|
|
49
|
+
BusinessInformation = require('../BusinessInformation').BusinessInformation
|
|
50
|
+
setBusinessInformationObtained(true)
|
|
51
|
+
}
|
|
52
|
+
setOpenBusinessInformation(true)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const handleClickBusinessReviews = () => {
|
|
56
|
+
if (!businessReviewsObtained) {
|
|
57
|
+
BusinessReviews = require('../BusinessReviews').BusinessReviews
|
|
58
|
+
setBusinessReviewsObtainedbtained(true)
|
|
59
|
+
}
|
|
60
|
+
setOpenBusinessReviews(true)
|
|
61
|
+
}
|
|
62
|
+
|
|
41
63
|
const getBusinessType = () => {
|
|
42
64
|
if (Object.keys(business).length <= 0) return t('GENERAL', 'General');
|
|
43
65
|
const _types: any = [];
|
|
@@ -51,7 +73,7 @@ export const BusinessBasicInformation = (
|
|
|
51
73
|
return _types.join(', ');
|
|
52
74
|
};
|
|
53
75
|
|
|
54
|
-
|
|
76
|
+
|
|
55
77
|
useEffect(() => {
|
|
56
78
|
if (businessState?.loading) return
|
|
57
79
|
let timeout: any = null
|
|
@@ -65,16 +87,16 @@ export const BusinessBasicInformation = (
|
|
|
65
87
|
})
|
|
66
88
|
}
|
|
67
89
|
if (lapse) {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
90
|
+
const to = currentDate.hour(lapse.close.hour).minute(lapse.close.minute)
|
|
91
|
+
const timeToClose = (to.unix() - currentDate.unix()) * 1000
|
|
92
|
+
timeout = setTimeout(() => {
|
|
93
|
+
navigation.navigate('BusinessPreorder', { business: businessState?.business, handleBusinessClick: () => navigation?.goBack() })
|
|
94
|
+
}, timeToClose)
|
|
73
95
|
}
|
|
74
96
|
return () => {
|
|
75
|
-
|
|
97
|
+
timeout && clearTimeout(timeout)
|
|
76
98
|
}
|
|
77
|
-
|
|
99
|
+
}, [businessState?.business])
|
|
78
100
|
|
|
79
101
|
return (
|
|
80
102
|
<BusinessContainer>
|
|
@@ -90,7 +112,7 @@ export const BusinessBasicInformation = (
|
|
|
90
112
|
optimizeImage(businessState?.business?.header, 'h_250,c_limit'),
|
|
91
113
|
}}>
|
|
92
114
|
{!isBusinessInfoShow && (
|
|
93
|
-
<WrapBusinessInfo onPress={() =>
|
|
115
|
+
<WrapBusinessInfo onPress={() => handleClickBusinessInformation()}>
|
|
94
116
|
<OIcon src={theme.images.general.info} width={24} />
|
|
95
117
|
</WrapBusinessInfo>
|
|
96
118
|
)}
|
|
@@ -121,9 +143,29 @@ export const BusinessBasicInformation = (
|
|
|
121
143
|
<PlaceholderLine height={30} width={20} />
|
|
122
144
|
</Placeholder>
|
|
123
145
|
) : (
|
|
124
|
-
<
|
|
125
|
-
{
|
|
126
|
-
|
|
146
|
+
<TitleWrapper>
|
|
147
|
+
<OText size={24} weight={'600'}>
|
|
148
|
+
{business?.name}
|
|
149
|
+
</OText>
|
|
150
|
+
{business?.ribbon?.enabled && (
|
|
151
|
+
<RibbonBox
|
|
152
|
+
bgColor={business?.ribbon?.color}
|
|
153
|
+
isRoundRect={business?.ribbon?.shape === shape?.rectangleRound}
|
|
154
|
+
isCapsule={business?.ribbon?.shape === shape?.capsuleShape}
|
|
155
|
+
>
|
|
156
|
+
<OText
|
|
157
|
+
size={10}
|
|
158
|
+
weight={'400'}
|
|
159
|
+
color={theme.colors.white}
|
|
160
|
+
numberOfLines={2}
|
|
161
|
+
ellipsizeMode='tail'
|
|
162
|
+
lineHeight={13}
|
|
163
|
+
>
|
|
164
|
+
{business?.ribbon?.text}
|
|
165
|
+
</OText>
|
|
166
|
+
</RibbonBox>
|
|
167
|
+
)}
|
|
168
|
+
</TitleWrapper>
|
|
127
169
|
)}
|
|
128
170
|
</BusinessInfoItem>
|
|
129
171
|
{loading ? (
|
|
@@ -181,13 +223,17 @@ export const BusinessBasicInformation = (
|
|
|
181
223
|
<WrapReviews>
|
|
182
224
|
{!isBusinessInfoShow && (
|
|
183
225
|
<>
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
{
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
226
|
+
{isPreOrder && (
|
|
227
|
+
<>
|
|
228
|
+
<TouchableOpacity onPress={() => navigation.navigate('BusinessPreorder', { business: businessState?.business, handleBusinessClick: () => navigation?.goBack() })}>
|
|
229
|
+
<OText color={theme.colors.textSecondary} style={{ textDecorationLine: 'underline' }}>
|
|
230
|
+
{t('PRE_ORDER', 'Preorder')}
|
|
231
|
+
</OText>
|
|
232
|
+
</TouchableOpacity>
|
|
233
|
+
<OText size={12} color={theme.colors.textSecondary}>{' \u2022 '}</OText>
|
|
234
|
+
</>
|
|
235
|
+
)}
|
|
236
|
+
<TouchableOpacity onPress={() => handleClickBusinessReviews()}>
|
|
191
237
|
<OText color={theme.colors.textSecondary} style={{ textDecorationLine: 'underline' }}>
|
|
192
238
|
{t('REVIEWS', 'Reviews')}
|
|
193
239
|
</OText>
|
|
@@ -196,28 +242,37 @@ export const BusinessBasicInformation = (
|
|
|
196
242
|
)}
|
|
197
243
|
</WrapReviews>
|
|
198
244
|
</BusinessInfo>
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
245
|
+
{businessInformationObtained ? (
|
|
246
|
+
<OModal
|
|
247
|
+
titleSectionStyle={styles.modalTitleSectionStyle}
|
|
248
|
+
open={openBusinessInformation}
|
|
249
|
+
onClose={() => setOpenBusinessInformation(false)}
|
|
250
|
+
isNotDecoration>
|
|
251
|
+
{BusinessInformation && (
|
|
252
|
+
<BusinessInformation
|
|
253
|
+
businessState={businessState}
|
|
254
|
+
business={business}
|
|
255
|
+
/>
|
|
256
|
+
)}
|
|
257
|
+
</OModal>
|
|
258
|
+
) : null}
|
|
259
|
+
{businessReviewsObtained ? (
|
|
260
|
+
<OModal
|
|
261
|
+
entireModal
|
|
262
|
+
titleSectionStyle={styles.modalTitleSectionStyle}
|
|
263
|
+
open={openBusinessReviews}
|
|
264
|
+
onClose={() => setOpenBusinessReviews(false)}
|
|
265
|
+
isNotDecoration
|
|
266
|
+
>
|
|
267
|
+
{BusinessReviews && (
|
|
268
|
+
<BusinessReviews
|
|
269
|
+
businessState={businessState}
|
|
270
|
+
businessId={business.id}
|
|
271
|
+
reviews={business.reviews?.reviews}
|
|
272
|
+
/>
|
|
273
|
+
)}
|
|
274
|
+
</OModal>
|
|
275
|
+
) : null}
|
|
221
276
|
</BusinessContainer>
|
|
222
277
|
);
|
|
223
278
|
};
|
|
@@ -262,4 +317,4 @@ const styles = StyleSheet.create({
|
|
|
262
317
|
zIndex: 100,
|
|
263
318
|
left: 40
|
|
264
319
|
},
|
|
265
|
-
});
|
|
320
|
+
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import styled from 'styled-components/native';
|
|
1
|
+
import styled, { css } from 'styled-components/native';
|
|
2
2
|
import { Platform } from 'react-native';
|
|
3
3
|
|
|
4
4
|
export const BusinessContainer = styled.View`
|
|
@@ -41,3 +41,30 @@ export const WrapBusinessInfo = styled.TouchableOpacity`
|
|
|
41
41
|
top: 16px;
|
|
42
42
|
end: 39px;
|
|
43
43
|
`;
|
|
44
|
+
|
|
45
|
+
export const TitleWrapper = styled.View`
|
|
46
|
+
width: 100%;
|
|
47
|
+
flex-direction: row;
|
|
48
|
+
align-items: center;
|
|
49
|
+
justify-content: space-between;
|
|
50
|
+
`
|
|
51
|
+
|
|
52
|
+
export const RibbonBox = styled.View`
|
|
53
|
+
margin-left: 5px;
|
|
54
|
+
background-color: ${(props: any) => props.theme.colors.primary};
|
|
55
|
+
padding: 2px 8px;
|
|
56
|
+
max-width: 180px;
|
|
57
|
+
align-self: flex-start;
|
|
58
|
+
|
|
59
|
+
${(props: any) => props.bgColor && css`
|
|
60
|
+
background-color: ${props.bgColor};
|
|
61
|
+
`}
|
|
62
|
+
|
|
63
|
+
${(props: any) => props.isRoundRect && css`
|
|
64
|
+
border-radius: 7.6px;
|
|
65
|
+
`}
|
|
66
|
+
|
|
67
|
+
${(props: any) => props.isCapsule && css`
|
|
68
|
+
border-radius: 50px;
|
|
69
|
+
`}
|
|
70
|
+
`
|
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
useUtils,
|
|
5
5
|
useOrder,
|
|
6
6
|
useLanguage,
|
|
7
|
+
useConfig
|
|
7
8
|
} from 'ordering-components/native';
|
|
8
9
|
import { OIcon, OText } from '../shared';
|
|
9
10
|
import { StyleSheet, View } from 'react-native';
|
|
@@ -25,18 +26,26 @@ import FontAwesomeIcon from 'react-native-vector-icons/FontAwesome5';
|
|
|
25
26
|
import FastImage from 'react-native-fast-image'
|
|
26
27
|
|
|
27
28
|
export const BusinessControllerUI = (props: BusinessControllerParams) => {
|
|
28
|
-
const {
|
|
29
|
-
business,
|
|
30
|
-
handleClick,
|
|
31
|
-
navigation,
|
|
32
|
-
isBusinessOpen,
|
|
33
|
-
style
|
|
29
|
+
const {
|
|
30
|
+
business,
|
|
31
|
+
handleClick,
|
|
32
|
+
navigation,
|
|
33
|
+
isBusinessOpen,
|
|
34
|
+
style,
|
|
35
|
+
businessHeader,
|
|
36
|
+
businessFeatured,
|
|
37
|
+
businessLogo,
|
|
38
|
+
businessReviews,
|
|
39
|
+
businessDeliveryPrice,
|
|
40
|
+
businessDeliveryTime,
|
|
41
|
+
businessPickupTime,
|
|
42
|
+
businessDistance
|
|
34
43
|
} = props;
|
|
35
44
|
const [{ parsePrice, parseDistance, parseNumber, optimizeImage }] = useUtils();
|
|
36
45
|
const [orderState] = useOrder();
|
|
46
|
+
const [configState] = useConfig();
|
|
37
47
|
const [, t] = useLanguage();
|
|
38
48
|
const theme = useTheme()
|
|
39
|
-
|
|
40
49
|
const styles = StyleSheet.create({
|
|
41
50
|
headerStyle: {
|
|
42
51
|
borderTopLeftRadius: 7.6,
|
|
@@ -116,18 +125,18 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
|
|
|
116
125
|
<FastImage
|
|
117
126
|
style={{ height: 120 }}
|
|
118
127
|
source={{
|
|
119
|
-
|
|
120
|
-
|
|
128
|
+
uri: optimizeImage(businessHeader || business?.header, 'h_500,c_limit'),
|
|
129
|
+
priority: FastImage.priority.normal,
|
|
121
130
|
}}
|
|
122
131
|
resizeMode={FastImage.resizeMode.cover}
|
|
123
132
|
/>
|
|
124
|
-
{business?.featured && (
|
|
133
|
+
{(businessFeatured ?? business?.featured) && (
|
|
125
134
|
<View style={styles.featured}>
|
|
126
135
|
<FontAwesomeIcon name="crown" size={26} color="gold" />
|
|
127
136
|
</View>
|
|
128
137
|
)}
|
|
129
138
|
<BusinessState>
|
|
130
|
-
{!isBusinessOpen && (
|
|
139
|
+
{!isBusinessOpen && (configState?.configs?.preorder_status_enabled?.value === '1') && (
|
|
131
140
|
<View style={styles.businessStateView}>
|
|
132
141
|
<OText
|
|
133
142
|
color={theme.colors.textThird}
|
|
@@ -145,17 +154,17 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
|
|
|
145
154
|
<FastImage
|
|
146
155
|
style={{ width: 56, height: 56 }}
|
|
147
156
|
source={{
|
|
148
|
-
|
|
149
|
-
|
|
157
|
+
uri: optimizeImage(businessLogo || business?.logo, 'h_150,c_limit'),
|
|
158
|
+
priority: FastImage.priority.normal,
|
|
150
159
|
}}
|
|
151
160
|
resizeMode={FastImage.resizeMode.cover}
|
|
152
161
|
/>
|
|
153
162
|
</BusinessLogo>
|
|
154
|
-
{business?.reviews?.total > 0 && (
|
|
163
|
+
{(businessReviews?.reviews?.total > 0 ?? business?.reviews?.total > 0) && (
|
|
155
164
|
<Reviews>
|
|
156
165
|
<OIcon src={theme.images.general.star} width={12} style={styles.starIcon} />
|
|
157
166
|
<OText size={10} style={{ lineHeight: 15 }}>
|
|
158
|
-
{parseNumber(business?.reviews?.total, { separator: '.' })}
|
|
167
|
+
{parseNumber(businessReviews?.reviews?.total ?? business?.reviews?.total, { separator: '.' })}
|
|
159
168
|
</OText>
|
|
160
169
|
</Reviews>
|
|
161
170
|
)}
|
|
@@ -181,15 +190,17 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
|
|
|
181
190
|
</View>
|
|
182
191
|
) : (
|
|
183
192
|
<View style={styles.bullet}>
|
|
184
|
-
|
|
185
|
-
{
|
|
186
|
-
|
|
193
|
+
{orderState?.options?.type === 1 && (
|
|
194
|
+
<OText size={10} color={theme.colors.textSecondary}>
|
|
195
|
+
{`${t('DELIVERY_FEE', 'Delivery fee')} ${parsePrice(businessDeliveryPrice ?? business?.delivery_price) + ' \u2022 '}`}
|
|
196
|
+
</OText>
|
|
197
|
+
)}
|
|
187
198
|
<OText size={10} color={theme.colors.textSecondary}>{`${convertHoursToMinutes(
|
|
188
199
|
orderState?.options?.type === 1
|
|
189
|
-
? business?.delivery_time
|
|
190
|
-
: business?.pickup_time,
|
|
200
|
+
? (businessDeliveryTime ?? business?.delivery_time)
|
|
201
|
+
: (businessPickupTime ?? business?.pickup_time),
|
|
191
202
|
)} \u2022 `}</OText>
|
|
192
|
-
<OText size={10} color={theme.colors.textSecondary}>{parseDistance(business?.distance)}</OText>
|
|
203
|
+
<OText size={10} color={theme.colors.textSecondary}>{parseDistance(businessDistance ?? business?.distance)}</OText>
|
|
193
204
|
</View>
|
|
194
205
|
)}
|
|
195
206
|
</Metadata>
|
|
@@ -58,9 +58,9 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
|
|
|
58
58
|
const maxDistanceOptions = [1000, 2000, 5000, 'default']
|
|
59
59
|
const maxTimeOptions = [5, 15, 30, 'default']
|
|
60
60
|
const sortItems = [
|
|
61
|
-
{ text: t('PICKED_FOR_YOU', 'Picked for you (default)'), value: '
|
|
61
|
+
{ text: t('PICKED_FOR_YOU', 'Picked for you (default)'), value: 'distance' },
|
|
62
62
|
{ text: t('DELIVERY_TIME', 'Delivery time'), value: 'delivery_time' },
|
|
63
|
-
{ text: t('PICKUP_TIME', 'Pickup time'), value: '
|
|
63
|
+
{ text: t('PICKUP_TIME', 'Pickup time'), value: 'pickup_time' }
|
|
64
64
|
]
|
|
65
65
|
|
|
66
66
|
const styles = StyleSheet.create({
|
|
@@ -137,6 +137,10 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
|
|
|
137
137
|
}
|
|
138
138
|
}, [filters, openFilters])
|
|
139
139
|
|
|
140
|
+
useEffect(() => {
|
|
141
|
+
handleSearchbusinessAndProducts(true)
|
|
142
|
+
}, [])
|
|
143
|
+
|
|
140
144
|
const MaxSectionItem = ({ title, options, filter }: any) => {
|
|
141
145
|
const parseValue = (option: number) => {
|
|
142
146
|
return filter === 'max_distance'
|
|
@@ -396,7 +400,7 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
|
|
|
396
400
|
<OText weight='bold' mBottom={7} size={16}>
|
|
397
401
|
{t('SORT', 'Sort')}
|
|
398
402
|
</OText>
|
|
399
|
-
{sortItems?.map(item => (
|
|
403
|
+
{sortItems?.filter(item => !(orderState?.options?.type === 1 && item?.value === 'pickup_time') && !(orderState?.options?.type === 2 && item?.value === 'delivery_time'))?.map(item => (
|
|
400
404
|
<TouchableOpacity
|
|
401
405
|
key={item?.value}
|
|
402
406
|
onPress={() => handleChangeFilters('orderBy', item?.value)}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React from 'react'
|
|
1
|
+
import React, { useEffect } from 'react'
|
|
2
2
|
import { useLanguage, BusinessMenuListing } from 'ordering-components/native'
|
|
3
3
|
import { OText } from '../shared'
|
|
4
4
|
import { BusinessMenuListParams } from '../../types'
|
|
@@ -7,6 +7,7 @@ import { useTheme } from 'styled-components/native'
|
|
|
7
7
|
import IconAntDesign from 'react-native-vector-icons/AntDesign'
|
|
8
8
|
import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder'
|
|
9
9
|
import SelectDropdown from 'react-native-select-dropdown'
|
|
10
|
+
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
10
11
|
|
|
11
12
|
const windowHeight = Dimensions.get('window').height;
|
|
12
13
|
|
|
@@ -18,6 +19,7 @@ const BusinessMenuListUI = (props: BusinessMenuListParams) => {
|
|
|
18
19
|
|
|
19
20
|
const [, t] = useLanguage()
|
|
20
21
|
const theme = useTheme()
|
|
22
|
+
const { top } = useSafeAreaInsets()
|
|
21
23
|
|
|
22
24
|
const styles = StyleSheet.create({
|
|
23
25
|
container: {
|
|
@@ -34,7 +36,7 @@ const BusinessMenuListUI = (props: BusinessMenuListParams) => {
|
|
|
34
36
|
height: 44,
|
|
35
37
|
width: '100%'
|
|
36
38
|
}
|
|
37
|
-
|
|
39
|
+
})
|
|
38
40
|
|
|
39
41
|
const dropDownIcon = () => {
|
|
40
42
|
return (
|
|
@@ -46,12 +48,18 @@ const BusinessMenuListUI = (props: BusinessMenuListParams) => {
|
|
|
46
48
|
)
|
|
47
49
|
}
|
|
48
50
|
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
if (!businessMenuList?.loading && businessMenuList?.menus?.length === 1){
|
|
53
|
+
setMenu(businessMenuList?.menus[0])
|
|
54
|
+
}
|
|
55
|
+
}, [businessMenuList?.menus])
|
|
56
|
+
|
|
49
57
|
return (
|
|
50
58
|
<>
|
|
51
59
|
{businessMenuList.loading ? (
|
|
52
60
|
<Placeholder Animation={Fade}>
|
|
53
61
|
<View>
|
|
54
|
-
<PlaceholderLine height={44}/>
|
|
62
|
+
<PlaceholderLine height={44} />
|
|
55
63
|
</View>
|
|
56
64
|
</Placeholder>
|
|
57
65
|
) : (
|
|
@@ -65,6 +73,7 @@ const BusinessMenuListUI = (props: BusinessMenuListParams) => {
|
|
|
65
73
|
onSelect={(selectedItem, index) => {
|
|
66
74
|
setMenu(selectedItem)
|
|
67
75
|
}}
|
|
76
|
+
defaultValue={businessMenuList?.menus?.length === 1 && businessMenuList?.menus[0]}
|
|
68
77
|
buttonTextAfterSelection={(selectedItem, index) => {
|
|
69
78
|
return selectedItem.name
|
|
70
79
|
}}
|
|
@@ -81,7 +90,7 @@ const BusinessMenuListUI = (props: BusinessMenuListParams) => {
|
|
|
81
90
|
dropdownStyle={{
|
|
82
91
|
borderRadius: 8,
|
|
83
92
|
borderColor: theme.colors.lightGray,
|
|
84
|
-
marginTop: Platform.OS === 'ios' ? 12 : -
|
|
93
|
+
marginTop: Platform.OS === 'ios' ? 12 : -top,
|
|
85
94
|
maxHeight: 160
|
|
86
95
|
}}
|
|
87
96
|
rowStyle={{
|
|
@@ -123,4 +132,4 @@ export const BusinessMenuList = (props: any) => {
|
|
|
123
132
|
};
|
|
124
133
|
|
|
125
134
|
return <BusinessMenuListing {...businessMenuListProps} />;
|
|
126
|
-
};
|
|
135
|
+
};
|