ordering-ui-react-native 0.15.11 → 0.15.13-release
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -3
- package/src/DeliveryApp.tsx +43 -1
- package/src/components/BusinessTypeFilter/index.tsx +12 -2
- package/src/components/BusinessTypeFilter/styles.tsx +1 -1
- package/src/components/BusinessesListing/index.tsx +1 -1
- package/src/components/Checkout/index.tsx +0 -1
- package/src/components/LanguageSelector/index.tsx +1 -0
- package/src/components/OrderDetails/index.tsx +26 -5
- package/src/components/PaymentOptions/index.tsx +9 -16
- package/src/components/PaymentOptionsWebView/index.tsx +123 -124
- package/src/components/ProductForm/index.tsx +1 -1
- package/src/components/ProductForm/styles.tsx +1 -0
- package/src/components/StripeElementsForm/index.tsx +27 -48
- package/src/components/VerifyPhone/styles.tsx +1 -2
- package/src/config.json +0 -2
- package/src/navigators/HomeNavigator.tsx +6 -0
- package/src/pages/BusinessProductsList.tsx +1 -0
- package/src/pages/BusinessesListing.tsx +1 -1
- package/src/pages/Checkout.tsx +1 -1
- package/src/pages/Sessions.tsx +22 -0
- package/src/types/index.tsx +1 -9
- package/themes/business/index.tsx +2 -0
- package/themes/business/src/components/Chat/index.tsx +3 -2
- package/themes/business/src/components/Home/index.tsx +128 -55
- package/themes/business/src/components/Home/styles.tsx +8 -1
- package/themes/business/src/components/NewOrderNotification/index.tsx +59 -98
- package/themes/business/src/components/OrderDetails/Business.tsx +2 -1
- package/themes/business/src/components/OrderDetails/Delivery.tsx +9 -9
- package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +150 -89
- package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +91 -17
- package/themes/business/src/components/OrderDetails/styles.tsx +7 -0
- package/themes/business/src/components/OrdersListManager/index.tsx +874 -0
- package/themes/business/src/components/OrdersListManager/styles.tsx +123 -0
- package/themes/business/src/components/OrdersListManager/utils.tsx +216 -0
- package/themes/business/src/components/OrdersOption/index.tsx +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 +48 -21
- package/themes/kiosk/src/components/Cart/index.tsx +98 -24
- package/themes/kiosk/src/components/Cart/styles.tsx +6 -0
- package/themes/kiosk/src/components/CartBottomSheet/index.tsx +1 -1
- package/themes/kiosk/src/components/CartBottomSheet/styles.tsx +1 -1
- package/themes/kiosk/src/components/CartContent/index.tsx +13 -3
- package/themes/kiosk/src/components/CartItem/index.tsx +20 -8
- package/themes/kiosk/src/components/CategoriesMenu/index.tsx +6 -5
- package/themes/kiosk/src/components/CustomerName/index.tsx +89 -88
- package/themes/kiosk/src/components/Intro/index.tsx +13 -13
- package/themes/kiosk/src/components/LanguageSelector/index.tsx +12 -8
- package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
- package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
- package/themes/kiosk/src/components/OrderDetails/index.tsx +136 -41
- package/themes/kiosk/src/components/OrderDetails/styles.tsx +5 -0
- package/themes/kiosk/src/components/OrderSummary/index.tsx +1 -1
- package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +10 -12
- package/themes/kiosk/src/components/ProductForm/index.tsx +174 -125
- package/themes/kiosk/src/components/ProductForm/styles.tsx +1 -1
- package/themes/kiosk/src/components/ProductOption/index.tsx +1 -0
- package/themes/kiosk/src/components/ProductOption/styles.tsx +1 -0
- package/themes/kiosk/src/components/UpsellingProducts/index.tsx +48 -34
- package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
- package/themes/kiosk/src/components/shared/OCard.tsx +112 -78
- package/themes/kiosk/src/types/index.d.ts +2 -0
- package/themes/original/index.tsx +179 -0
- package/themes/original/src/components/AddressForm/index.tsx +15 -10
- package/themes/original/src/components/AddressList/index.tsx +28 -2
- package/themes/original/src/components/AppleLogin/index.tsx +119 -78
- package/themes/original/src/components/BusinessBasicInformation/index.tsx +96 -45
- package/themes/original/src/components/BusinessBasicInformation/styles.tsx +28 -1
- package/themes/original/src/components/BusinessController/index.tsx +52 -22
- package/themes/original/src/components/BusinessController/styles.tsx +22 -0
- package/themes/original/src/components/BusinessFeaturedController/index.tsx +20 -1
- package/themes/original/src/components/BusinessFeaturedController/styles.tsx +23 -0
- package/themes/original/src/components/BusinessListingSearch/index.tsx +4 -0
- package/themes/original/src/components/BusinessMenuList/index.tsx +11 -4
- package/themes/original/src/components/BusinessPreorder/index.tsx +141 -121
- package/themes/original/src/components/BusinessProductsCategories/index.tsx +7 -5
- package/themes/original/src/components/BusinessProductsList/index.tsx +129 -22
- package/themes/original/src/components/BusinessProductsList/styles.tsx +29 -2
- package/themes/original/src/components/BusinessProductsListing/index.tsx +92 -37
- package/themes/original/src/components/BusinessProductsListing/styles.tsx +22 -0
- package/themes/original/src/components/BusinessReviews/index.tsx +4 -25
- package/themes/original/src/components/BusinessesListing/index.tsx +40 -53
- package/themes/original/src/components/Cart/index.tsx +41 -10
- package/themes/original/src/components/CartContent/index.tsx +2 -2
- package/themes/original/src/components/Checkout/index.tsx +23 -27
- package/themes/original/src/components/CouponControl/index.tsx +1 -0
- package/themes/original/src/components/DriverTips/index.tsx +1 -1
- package/themes/original/src/components/ForgotPasswordForm/index.tsx +8 -12
- package/themes/original/src/components/HighestRatedBusinesses/index.tsx +97 -89
- package/themes/original/src/components/Home/index.tsx +1 -1
- package/themes/original/src/components/LoginForm/index.tsx +156 -70
- package/themes/original/src/components/LoginForm/styles.tsx +6 -1
- package/themes/original/src/components/Messages/index.tsx +50 -45
- package/themes/original/src/components/Messages/styles.tsx +1 -3
- package/themes/original/src/components/MomentOption/index.tsx +10 -1
- package/themes/original/src/components/MomentOption/styles.tsx +1 -1
- package/themes/original/src/components/OrderDetails/index.tsx +105 -127
- package/themes/original/src/components/OrderDetails/styles.tsx +3 -1
- package/themes/original/src/components/OrderProgress/index.tsx +4 -4
- package/themes/original/src/components/OrderProgress/styles.tsx +1 -0
- package/themes/original/src/components/OrderSummary/index.tsx +35 -2
- package/themes/original/src/components/OrderTypeSelector/index.tsx +1 -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 +47 -36
- package/themes/original/src/components/ProductForm/styles.tsx +2 -2
- package/themes/original/src/components/Promotions/index.tsx +233 -0
- package/themes/original/src/components/Promotions/styles.tsx +58 -0
- package/themes/original/src/components/ReviewOrder/index.tsx +10 -9
- package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
- package/themes/original/src/components/Sessions/index.tsx +160 -0
- package/themes/original/src/components/Sessions/styles.tsx +15 -0
- package/themes/original/src/components/SignupForm/index.tsx +173 -154
- package/themes/original/src/components/SingleProductCard/index.tsx +39 -18
- package/themes/original/src/components/SingleProductCard/styles.tsx +28 -1
- package/themes/original/src/components/StripeElementsForm/index.tsx +55 -72
- package/themes/original/src/components/TaxInformation/index.tsx +17 -7
- package/themes/original/src/components/UpsellingProducts/index.tsx +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 +29 -17
- package/themes/original/src/components/UserProfileForm/index.tsx +8 -6
- package/themes/original/src/components/VerifyPhone/index.tsx +10 -7
- package/themes/original/src/components/VerifyPhone/styles.tsx +2 -1
- package/themes/original/src/components/Wallets/index.tsx +58 -4
- package/themes/original/src/components/Wallets/styles.tsx +21 -0
- package/themes/original/src/components/shared/HeaderTitle.tsx +21 -0
- package/themes/original/src/components/shared/index.tsx +2 -0
- package/themes/original/src/config/constants.tsx +6 -6
- package/themes/original/src/types/index.tsx +70 -23
- package/themes/original/src/utils/index.tsx +12 -2
- package/themes/single-business/src/components/AddressList/index.tsx +1 -1
- package/themes/single-business/src/components/OrderTypeSelector/index.tsx +6 -6
- package/themes/single-business/src/components/UserProfile/index.tsx +1 -1
- package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
- package/src/components/StripeMethodForm/index.tsx +0 -168
|
@@ -61,7 +61,6 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
|
|
|
61
61
|
handleChangeSearch,
|
|
62
62
|
businessId
|
|
63
63
|
} = props;
|
|
64
|
-
|
|
65
64
|
const theme = useTheme();
|
|
66
65
|
const isFocused = useIsFocused();
|
|
67
66
|
const appState = useRef(AppState.currentState)
|
|
@@ -120,7 +119,7 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
|
|
|
120
119
|
|
|
121
120
|
const isPreorderEnabled = (configs?.preorder_status_enabled?.value === '1' || configs?.preorder_status_enabled?.value === 'true') &&
|
|
122
121
|
Number(configs?.max_days_preorder?.value) > 0
|
|
123
|
-
|
|
122
|
+
const isPreOrderSetting = configs?.preorder_status_enabled?.value === '1'
|
|
124
123
|
const timerId = useRef<any>(false)
|
|
125
124
|
// const panResponder = useRef(
|
|
126
125
|
// PanResponder.create({
|
|
@@ -166,25 +165,22 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
|
|
|
166
165
|
return R * c
|
|
167
166
|
}
|
|
168
167
|
|
|
169
|
-
useEffect(() => {
|
|
170
|
-
if (businessesList.businesses.length > 0) {
|
|
171
|
-
const fb = businessesList.businesses.filter((b) => b.featured == true);
|
|
172
|
-
const ary = [];
|
|
173
|
-
while (fb.length > 0) {
|
|
174
|
-
ary.push(fb.splice(0, 2));
|
|
175
|
-
}
|
|
176
|
-
setFeaturedBusinesses(ary);
|
|
177
|
-
}
|
|
178
|
-
}, [businessesList.businesses]);
|
|
179
|
-
|
|
180
168
|
const resetInactivityTimeout = () => {
|
|
181
169
|
clearTimeout(timerId.current)
|
|
182
170
|
timerId.current = setInterval(() => {
|
|
183
171
|
getBusinesses(true)
|
|
184
|
-
},
|
|
172
|
+
}, 120000)
|
|
185
173
|
}
|
|
186
174
|
|
|
187
175
|
useEffect(() => {
|
|
176
|
+
if (!businessesList?.loading) {
|
|
177
|
+
const fb = businessesList.businesses.filter((b) => b.featured === true && b?.open);
|
|
178
|
+
const ary = [];
|
|
179
|
+
while (fb.length > 0) {
|
|
180
|
+
ary.push(fb.splice(0, 2));
|
|
181
|
+
}
|
|
182
|
+
setFeaturedBusinesses(ary);
|
|
183
|
+
}
|
|
188
184
|
resetInactivityTimeout()
|
|
189
185
|
}, [businessesList.loading])
|
|
190
186
|
|
|
@@ -207,27 +203,8 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
|
|
|
207
203
|
})
|
|
208
204
|
}, [orderState?.options?.address?.location])
|
|
209
205
|
|
|
210
|
-
useEffect(() => {
|
|
211
|
-
const onFocusApp = (nextAppState: any) => {
|
|
212
|
-
if (
|
|
213
|
-
appState.current.match(/inactive|background/) &&
|
|
214
|
-
nextAppState === "active"
|
|
215
|
-
) {
|
|
216
|
-
getBusinesses(true);
|
|
217
|
-
}
|
|
218
|
-
appState.current = nextAppState;
|
|
219
|
-
setAppStateVisible(appState.current);
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
AppState.addEventListener("change", onFocusApp);
|
|
223
|
-
return () => {
|
|
224
|
-
AppState.removeEventListener('change', onFocusApp);
|
|
225
|
-
};
|
|
226
|
-
}, [])
|
|
227
|
-
|
|
228
206
|
useFocusEffect(
|
|
229
207
|
useCallback(() => {
|
|
230
|
-
getBusinesses(true)
|
|
231
208
|
resetInactivityTimeout()
|
|
232
209
|
return () => clearTimeout(timerId.current)
|
|
233
210
|
}, [navigation])
|
|
@@ -288,25 +265,27 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
|
|
|
288
265
|
style={{ marginStart: 8 }}
|
|
289
266
|
/>
|
|
290
267
|
</WrapMomentOption>
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
268
|
+
{isPreOrderSetting && (
|
|
269
|
+
<WrapMomentOption
|
|
270
|
+
onPress={() => handleMomentClick()}>
|
|
271
|
+
<OText
|
|
272
|
+
size={12}
|
|
273
|
+
numberOfLines={1}
|
|
274
|
+
ellipsizeMode="tail"
|
|
275
|
+
color={theme.colors.textSecondary}>
|
|
276
|
+
{orderState.options?.momentß
|
|
277
|
+
? parseDate(orderState.options?.moment, { outputFormat: configs?.dates_moment_format?.value })
|
|
278
|
+
: t('ASAP_ABBREVIATION', 'ASAP')}
|
|
279
|
+
</OText>
|
|
280
|
+
{isPreorderEnabled && (
|
|
281
|
+
<OIcon
|
|
282
|
+
src={theme.images.general.arrow_down}
|
|
283
|
+
width={10}
|
|
284
|
+
style={{ marginStart: 8 }}
|
|
285
|
+
/>
|
|
286
|
+
)}
|
|
287
|
+
</WrapMomentOption>
|
|
288
|
+
)}
|
|
310
289
|
|
|
311
290
|
{!businessId && (
|
|
312
291
|
<SearchBar
|
|
@@ -338,7 +317,7 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
|
|
|
338
317
|
{
|
|
339
318
|
!businessId && !props.franchiseId && featuredBusiness && featuredBusiness.length > 0 && (
|
|
340
319
|
<FeaturedWrapper>
|
|
341
|
-
<OText size={16} style={{ marginLeft: 40 }} weight={Platform.OS === 'ios' ? '600' : 'bold'}>{t('
|
|
320
|
+
<OText size={16} style={{ marginLeft: 40 }} weight={Platform.OS === 'ios' ? '600' : 'bold'}>{t('BUSINESS_FEATURE', 'Featured business')}</OText>
|
|
342
321
|
<ScrollView
|
|
343
322
|
showsHorizontalScrollIndicator={false}
|
|
344
323
|
nestedScrollEnabled
|
|
@@ -401,6 +380,14 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
|
|
|
401
380
|
handleCustomClick={handleBusinessClick}
|
|
402
381
|
orderType={orderState?.options?.type}
|
|
403
382
|
navigation={navigation}
|
|
383
|
+
businessHeader={business?.header}
|
|
384
|
+
businessFeatured={business?.featured}
|
|
385
|
+
businessLogo={business?.logo}
|
|
386
|
+
businessReviews={business?.reviews}
|
|
387
|
+
businessDeliveryPrice={business?.delivery_price}
|
|
388
|
+
businessDeliveryTime={business?.delivery_time}
|
|
389
|
+
businessPickupTime={business?.pickup_time}
|
|
390
|
+
businessDistance={business?.distance}
|
|
404
391
|
/>
|
|
405
392
|
)
|
|
406
393
|
)}
|
|
@@ -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')
|
|
@@ -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
|
-
({fee?.fixed > 0 && `${parsePrice(fee?.fixed)} + `}{fee.percentage}
|
|
258
|
+
({fee?.fixed > 0 && `${parsePrice(fee?.fixed)}${fee.percentage > 0 ? ' + ' : ''}`}{fee.percentage > 0 && `${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} />
|
|
@@ -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 }}>
|
|
@@ -425,8 +446,6 @@ const CartUI = (props: any) => {
|
|
|
425
446
|
open={openTaxModal.open}
|
|
426
447
|
onClose={() => setOpenTaxModal({ open: false, data: null, type: '' })}
|
|
427
448
|
entireModal
|
|
428
|
-
title={`${openTaxModal.data?.name ||
|
|
429
|
-
t('INHERIT_FROM_BUSINESS', 'Inherit from business')} ${openTaxModal.data?.rate_type !== 2 ? `(${typeof openTaxModal.data?.rate === 'number' ? `${openTaxModal.data?.rate}%` : `${parsePrice(openTaxModal.data?.fixed ?? 0)} + ${openTaxModal.data?.percentage}%`})` : ''} `}
|
|
430
449
|
>
|
|
431
450
|
<TaxInformation
|
|
432
451
|
type={openTaxModal.type}
|
|
@@ -434,14 +453,26 @@ const CartUI = (props: any) => {
|
|
|
434
453
|
products={cart?.products}
|
|
435
454
|
/>
|
|
436
455
|
</OModal>
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
456
|
+
<OModal
|
|
457
|
+
open={openPlaceModal}
|
|
458
|
+
title={t('CHOOSE_YOUR_SPOT', 'Choose your spot')}
|
|
459
|
+
onClose={() => setOpenPlaceModal(false)}
|
|
460
|
+
entireModal
|
|
461
|
+
>
|
|
462
|
+
<PlaceSpot
|
|
463
|
+
cart={cart}
|
|
464
|
+
isOpenPlaceSpot={openPlaceModal}
|
|
465
|
+
setOpenPlaceModal={setOpenPlaceModal}
|
|
444
466
|
/>
|
|
467
|
+
</OModal>
|
|
468
|
+
<OAlert
|
|
469
|
+
open={confirm.open}
|
|
470
|
+
title={confirm.title}
|
|
471
|
+
content={confirm.content}
|
|
472
|
+
onAccept={confirm.handleOnAccept}
|
|
473
|
+
onCancel={() => setConfirm({ ...confirm, open: false, title: null })}
|
|
474
|
+
onClose={() => setConfirm({ ...confirm, open: false, title: null })}
|
|
475
|
+
/>
|
|
445
476
|
</CContainer>
|
|
446
477
|
)
|
|
447
478
|
}
|
|
@@ -22,9 +22,9 @@ export const CartContent = (props: any) => {
|
|
|
22
22
|
<CCContainer>
|
|
23
23
|
{isOrderStateCarts && carts?.length > 0 && (
|
|
24
24
|
<>
|
|
25
|
-
<OText size={24} lineHeight={36} weight={'600'} style={{ marginBottom: 20 }}>
|
|
25
|
+
{/* <OText size={24} lineHeight={36} weight={'600'} style={{ marginBottom: 20 }}>
|
|
26
26
|
{carts.length > 1 ? t('MY_CARTS', 'My Carts') : t('CART', 'Cart')}
|
|
27
|
-
</OText>
|
|
27
|
+
</OText> */}
|
|
28
28
|
{carts.map((cart: any, i: number) => (
|
|
29
29
|
<CCList key={i} style={{ overflow: 'visible' }}>
|
|
30
30
|
{cart.products.length > 0 && (
|
|
@@ -132,10 +132,11 @@ const CheckoutUI = (props: any) => {
|
|
|
132
132
|
const [isDeliveryOptionModalVisible, setIsDeliveryOptionModalVisible] = useState(false)
|
|
133
133
|
const [showGateway, setShowGateway] = useState<any>({ closedByUsed: false, open: false });
|
|
134
134
|
const [webviewPaymethod, setWebviewPaymethod] = useState<any>(null)
|
|
135
|
-
|
|
136
|
-
|
|
135
|
+
|
|
136
|
+
const placeSpotTypes = [3, 4]
|
|
137
137
|
const isWalletEnabled = configs?.wallet_enabled?.value === '1' && (configs?.wallet_cash_enabled?.value === '1' || configs?.wallet_credit_point_enabled?.value === '1')
|
|
138
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)
|
|
139
140
|
|
|
140
141
|
const driverTipsOptions = typeof configs?.driver_tip_options?.value === 'string'
|
|
141
142
|
? JSON.parse(configs?.driver_tip_options?.value) || []
|
|
@@ -156,7 +157,7 @@ const CheckoutUI = (props: any) => {
|
|
|
156
157
|
navigation.navigate('MomentOption')
|
|
157
158
|
}
|
|
158
159
|
}
|
|
159
|
-
|
|
160
|
+
|
|
160
161
|
const handlePlaceOrder = () => {
|
|
161
162
|
if (!userErrors.length) {
|
|
162
163
|
handlerClickPlaceOrder && handlerClickPlaceOrder()
|
|
@@ -201,8 +202,8 @@ const CheckoutUI = (props: any) => {
|
|
|
201
202
|
if (
|
|
202
203
|
!user?.cellphone &&
|
|
203
204
|
((validationFields?.fields?.checkout?.cellphone?.enabled &&
|
|
204
|
-
|
|
205
|
-
|
|
205
|
+
validationFields?.fields?.checkout?.cellphone?.required) ||
|
|
206
|
+
configs?.verification_phone_required?.value === '1')
|
|
206
207
|
) {
|
|
207
208
|
errors.push(t('VALIDATION_ERROR_MOBILE_PHONE_REQUIRED', 'The field Phone number is required'))
|
|
208
209
|
}
|
|
@@ -252,8 +253,8 @@ const CheckoutUI = (props: any) => {
|
|
|
252
253
|
isVertical
|
|
253
254
|
onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
|
|
254
255
|
title={t('CHECKOUT', 'Checkout')}
|
|
255
|
-
|
|
256
|
-
|
|
256
|
+
titleStyle={{ marginLeft: 0, marginRight: 0, paddingLeft: 40 }}
|
|
257
|
+
btnStyle={{ marginLeft: 40, padding: 40 }}
|
|
257
258
|
/>
|
|
258
259
|
<ChContainer style={styles.pagePadding}>
|
|
259
260
|
<ChSection style={{ paddingTop: 0 }}>
|
|
@@ -268,15 +269,15 @@ const CheckoutUI = (props: any) => {
|
|
|
268
269
|
/>
|
|
269
270
|
</CHMomentWrapper>
|
|
270
271
|
<CHMomentWrapper
|
|
271
|
-
|
|
272
|
-
|
|
272
|
+
onPress={() => handleMomentClick()}
|
|
273
|
+
disabled={loading}
|
|
273
274
|
>
|
|
274
275
|
<OText size={12} numberOfLines={1} ellipsizeMode='tail' color={theme.colors.textSecondary}>
|
|
275
276
|
{options?.moment
|
|
276
277
|
? parseDate(options?.moment, { outputFormat: configs?.dates_moment_format?.value })
|
|
277
278
|
: t('ASAP_ABBREVIATION', 'ASAP')}
|
|
278
279
|
</OText>
|
|
279
|
-
{
|
|
280
|
+
{isPreOrder && (
|
|
280
281
|
<OIcon
|
|
281
282
|
src={theme.images.general.arrow_down}
|
|
282
283
|
width={10}
|
|
@@ -545,17 +546,17 @@ const CheckoutUI = (props: any) => {
|
|
|
545
546
|
onNavigationRedirect={onNavigationRedirect}
|
|
546
547
|
paySelected={paymethodSelected}
|
|
547
548
|
handlePaymentMethodClickCustom={handlePaymentMethodClick}
|
|
548
|
-
handlePlaceOrder={handlePlaceOrder}
|
|
549
549
|
/>
|
|
550
550
|
</ChPaymethods>
|
|
551
551
|
</ChSection>
|
|
552
552
|
)}
|
|
553
553
|
|
|
554
|
-
{!cartState.loading && cart && isWalletEnabled && (
|
|
554
|
+
{!cartState.loading && cart && isWalletEnabled && businessDetails?.business?.configs && (
|
|
555
555
|
<WalletPaymentOptionContainer>
|
|
556
556
|
<PaymentOptionWallet
|
|
557
557
|
cart={cart}
|
|
558
558
|
businessId={cart?.business_id}
|
|
559
|
+
businessConfigs={businessDetails?.business?.configs}
|
|
559
560
|
/>
|
|
560
561
|
</WalletPaymentOptionContainer>
|
|
561
562
|
)}
|
|
@@ -648,6 +649,14 @@ const CheckoutUI = (props: any) => {
|
|
|
648
649
|
{t('WARNING_INVALID_PRODUCTS', 'Some products are invalid, please check them.')}
|
|
649
650
|
</OText>
|
|
650
651
|
)}
|
|
652
|
+
{placeSpotTypes.includes(options?.type) && !cart?.place && (
|
|
653
|
+
<OText
|
|
654
|
+
color={theme.colors.error}
|
|
655
|
+
size={12}
|
|
656
|
+
>
|
|
657
|
+
{t('WARNING_PLACE_SPOT', 'Please, select your spot to place order.')}
|
|
658
|
+
</OText>
|
|
659
|
+
)}
|
|
651
660
|
</ChErrors>
|
|
652
661
|
</View>
|
|
653
662
|
)}
|
|
@@ -667,8 +676,8 @@ const CheckoutUI = (props: any) => {
|
|
|
667
676
|
{!cartState.loading && cart && cart?.status !== 2 && (
|
|
668
677
|
<FloatingButton
|
|
669
678
|
handleClick={() => handlePlaceOrder()}
|
|
670
|
-
isSecondaryBtn={
|
|
671
|
-
disabled={
|
|
679
|
+
isSecondaryBtn={isDisabledButtonPlace}
|
|
680
|
+
disabled={isDisabledButtonPlace}
|
|
672
681
|
btnText={cart?.subtotal >= cart?.minimum
|
|
673
682
|
? (
|
|
674
683
|
placing
|
|
@@ -696,19 +705,6 @@ const CheckoutUI = (props: any) => {
|
|
|
696
705
|
setShowGateway={setShowGateway}
|
|
697
706
|
/>
|
|
698
707
|
)}
|
|
699
|
-
{webviewPaymethod?.gateway === 'square' && showGateway.open && (
|
|
700
|
-
<PaymentOptionsWebView
|
|
701
|
-
onNavigationRedirect={onNavigationRedirect}
|
|
702
|
-
uri={`https://test-square-f50f7.web.app`}
|
|
703
|
-
user={user}
|
|
704
|
-
token={token}
|
|
705
|
-
cart={cart}
|
|
706
|
-
currency={currency}
|
|
707
|
-
webviewPaymethod={webviewPaymethod}
|
|
708
|
-
setShowGateway={setShowGateway}
|
|
709
|
-
locationId={'L1NGAY5M6KJRX'}
|
|
710
|
-
/>
|
|
711
|
-
)}
|
|
712
708
|
</>
|
|
713
709
|
)
|
|
714
710
|
}
|
|
@@ -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,8 +1,8 @@
|
|
|
1
1
|
import React, { useEffect } from 'react';
|
|
2
2
|
import {
|
|
3
|
-
|
|
3
|
+
BusinessList as BusinessesListingController,
|
|
4
4
|
useLanguage,
|
|
5
|
-
|
|
5
|
+
useOrder
|
|
6
6
|
} from 'ordering-components/native';
|
|
7
7
|
import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
|
|
8
8
|
import { View, ScrollView, Platform, Dimensions } from 'react-native';
|
|
@@ -24,117 +24,125 @@ const HighestRatedBusinessesUI = (props: HighestRatedBusinessesParams) => {
|
|
|
24
24
|
} = props;
|
|
25
25
|
|
|
26
26
|
const [, t] = useLanguage()
|
|
27
|
-
|
|
27
|
+
const [orderState] = useOrder()
|
|
28
28
|
|
|
29
29
|
const windowWidth = Dimensions.get('window').width;
|
|
30
30
|
|
|
31
31
|
useEffect(() => {
|
|
32
|
-
if (businessesList?.loading || !isLoading) return
|
|
32
|
+
if (businessesList?.loading || !isLoading) return
|
|
33
33
|
getBusinesses(true)
|
|
34
34
|
}, [isLoading])
|
|
35
35
|
|
|
36
36
|
return (
|
|
37
37
|
<>
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
justifyContent: 'space-between',
|
|
71
|
-
}}>
|
|
72
|
-
<PlaceholderLine
|
|
73
|
-
height={15}
|
|
74
|
-
width={40}
|
|
75
|
-
style={{ marginBottom: 15 }}
|
|
76
|
-
/>
|
|
77
|
-
<PlaceholderLine
|
|
78
|
-
height={15}
|
|
79
|
-
width={20}
|
|
80
|
-
style={{ marginBottom: 15 }}
|
|
81
|
-
/>
|
|
82
|
-
</View>
|
|
38
|
+
|
|
39
|
+
{businessesList.loading ? (
|
|
40
|
+
<>
|
|
41
|
+
<ScrollView
|
|
42
|
+
showsHorizontalScrollIndicator={false}
|
|
43
|
+
nestedScrollEnabled
|
|
44
|
+
horizontal
|
|
45
|
+
style={{ height: 300, paddingHorizontal: 40 }}
|
|
46
|
+
>
|
|
47
|
+
{[
|
|
48
|
+
...Array(10).keys()
|
|
49
|
+
].map((item, i) => (
|
|
50
|
+
<Placeholder
|
|
51
|
+
Animation={Fade}
|
|
52
|
+
key={i}
|
|
53
|
+
style={{
|
|
54
|
+
marginTop: 20,
|
|
55
|
+
width: windowWidth - 100,
|
|
56
|
+
paddingHorizontal: 5,
|
|
57
|
+
height: '100%'
|
|
58
|
+
}}>
|
|
59
|
+
<View style={{ width: '100%' }}>
|
|
60
|
+
<PlaceholderLine
|
|
61
|
+
height={150}
|
|
62
|
+
style={{ marginBottom: 20, borderRadius: 8 }}
|
|
63
|
+
/>
|
|
64
|
+
<View style={{ paddingHorizontal: 10 }}>
|
|
65
|
+
<View
|
|
66
|
+
style={{
|
|
67
|
+
flexDirection: 'row',
|
|
68
|
+
justifyContent: 'space-between',
|
|
69
|
+
}}>
|
|
83
70
|
<PlaceholderLine
|
|
84
71
|
height={15}
|
|
85
|
-
width={
|
|
86
|
-
style={{ marginBottom:
|
|
72
|
+
width={40}
|
|
73
|
+
style={{ marginBottom: 15 }}
|
|
87
74
|
/>
|
|
88
75
|
<PlaceholderLine
|
|
89
76
|
height={15}
|
|
90
|
-
width={
|
|
91
|
-
style={{ marginBottom:
|
|
77
|
+
width={20}
|
|
78
|
+
style={{ marginBottom: 15 }}
|
|
92
79
|
/>
|
|
93
80
|
</View>
|
|
81
|
+
<PlaceholderLine
|
|
82
|
+
height={15}
|
|
83
|
+
width={30}
|
|
84
|
+
style={{ marginBottom: 10 }}
|
|
85
|
+
/>
|
|
86
|
+
<PlaceholderLine
|
|
87
|
+
height={15}
|
|
88
|
+
width={80}
|
|
89
|
+
style={{ marginBottom: 10 }}
|
|
90
|
+
/>
|
|
94
91
|
</View>
|
|
95
|
-
</
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
92
|
+
</View>
|
|
93
|
+
</Placeholder>
|
|
94
|
+
))}
|
|
95
|
+
</ScrollView>
|
|
96
|
+
</>
|
|
97
|
+
) : (
|
|
98
|
+
<>
|
|
99
|
+
{businessesList.businesses.length > 0 && (
|
|
100
|
+
<ListWrapper>
|
|
101
|
+
<OText size={16} mBottom={5} weight={Platform.OS === 'ios' ? '600' : 'bold'}>{t('HIGHEST_RATED', 'Highest rated')}</OText>
|
|
102
|
+
<OText size={12}>{t('TOP_RATINGS_AND_GREAT_SERVICE', 'Top ratings and great service')}</OText>
|
|
103
|
+
<ScrollView
|
|
104
|
+
showsHorizontalScrollIndicator={false}
|
|
105
|
+
nestedScrollEnabled
|
|
106
|
+
horizontal
|
|
107
|
+
style={{ height: 300 }}
|
|
108
|
+
>
|
|
109
|
+
{
|
|
110
|
+
businessesList.businesses?.map(
|
|
111
|
+
(business: any) => (
|
|
112
|
+
<View
|
|
113
|
+
key={business.id}
|
|
114
|
+
style={{
|
|
115
|
+
width: windowWidth - 100,
|
|
116
|
+
paddingHorizontal: 5,
|
|
117
|
+
height: '100%'
|
|
118
|
+
}}
|
|
119
|
+
>
|
|
120
|
+
<BusinessController
|
|
121
|
+
business={business}
|
|
122
|
+
isBusinessOpen={business?.open}
|
|
123
|
+
handleCustomClick={onBusinessClick}
|
|
124
|
+
orderType={orderState?.options?.type}
|
|
125
|
+
navigation={navigation}
|
|
126
|
+
/>
|
|
127
|
+
</View>
|
|
128
|
+
)
|
|
119
129
|
)
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
)}
|
|
124
|
-
</>
|
|
130
|
+
}
|
|
131
|
+
</ScrollView>
|
|
132
|
+
</ListWrapper>
|
|
125
133
|
)}
|
|
126
|
-
|
|
127
|
-
|
|
134
|
+
</>
|
|
135
|
+
)}
|
|
128
136
|
</>
|
|
129
137
|
)
|
|
130
138
|
}
|
|
131
139
|
|
|
132
140
|
export const HighestRatedBusinesses = (props: any) => {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
141
|
+
const highestRatedBusinessesProps = {
|
|
142
|
+
...props,
|
|
143
|
+
UIComponent: HighestRatedBusinessesUI,
|
|
136
144
|
initialOrderByValue: 'rating'
|
|
137
|
-
|
|
145
|
+
};
|
|
138
146
|
|
|
139
|
-
|
|
147
|
+
return <BusinessesListingController {...highestRatedBusinessesProps} />;
|
|
140
148
|
};
|