ordering-ui-react-native 0.22.56-test → 0.22.57-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 -7
- package/src/DeliveryApp.tsx +1 -1
- package/src/components/BusinessesListing/index.tsx +1 -1
- package/src/components/Checkout/index.tsx +40 -39
- package/src/components/VerifyPhone/styles.tsx +1 -2
- package/src/context/OfflineActions/index.tsx +236 -0
- package/src/providers/AlertProvider.tsx +3 -1
- package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +9 -6
- package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
- package/themes/business/src/components/BusinessController/index.tsx +8 -3
- package/themes/business/src/components/BusinessProductList/index.tsx +3 -2
- package/themes/business/src/components/Chat/index.tsx +15 -3
- package/themes/business/src/components/DriverMap/index.tsx +44 -33
- package/themes/business/src/components/FloatingButton/index.tsx +3 -2
- package/themes/business/src/components/LanguageSelector/index.tsx +1 -1
- package/themes/business/src/components/LoginForm/index.tsx +123 -98
- package/themes/business/src/components/LogoutButton/index.tsx +13 -4
- package/themes/business/src/components/MapView/RenderMarker.tsx +146 -0
- package/themes/business/src/components/MapView/index.tsx +68 -142
- package/themes/business/src/components/NewOrderNotification/index.tsx +25 -14
- package/themes/business/src/components/OrderDetails/Business.tsx +56 -20
- package/themes/business/src/components/OrderDetails/Delivery.tsx +134 -53
- package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +155 -45
- package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +51 -28
- package/themes/business/src/components/OrderDetails/styles.tsx +39 -3
- package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +17 -16
- package/themes/business/src/components/OrderDetailsLogistic/index.tsx +3 -2
- package/themes/business/src/components/OrderSummary/index.tsx +271 -176
- package/themes/business/src/components/OrdersListManager/index.tsx +13 -1
- package/themes/business/src/components/OrdersOption/index.tsx +345 -231
- package/themes/business/src/components/OrdersOption/styles.tsx +14 -0
- package/themes/business/src/components/PreviousMessages/index.tsx +26 -3
- package/themes/business/src/components/PreviousOrders/OrderItem.tsx +30 -18
- package/themes/business/src/components/PreviousOrders/index.tsx +74 -66
- package/themes/business/src/components/PreviousOrders/styles.tsx +2 -1
- package/themes/business/src/components/PrinterEdition/MessageAlert.tsx +33 -0
- package/themes/business/src/components/PrinterEdition/index.tsx +143 -75
- package/themes/business/src/components/PrinterEdition/printerList.tsx +23 -0
- package/themes/business/src/components/PrinterSettings/index.tsx +1 -1
- package/themes/business/src/components/ProductItemAccordion/index.tsx +3 -2
- package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
- package/themes/business/src/components/StoresList/index.tsx +2 -2
- package/themes/business/src/components/UserProfileForm/index.tsx +48 -10
- package/themes/business/src/components/UserProfileForm/styles.tsx +7 -0
- package/themes/business/src/components/WebsocketStatus/index.tsx +2 -2
- package/themes/business/src/config/currency.tsx +1010 -0
- package/themes/business/src/hooks/useLocation.tsx +16 -12
- package/themes/business/src/layouts/SafeAreaContainer.tsx +35 -19
- package/themes/business/src/types/index.tsx +34 -7
- package/themes/business/src/utils/index.tsx +28 -3
- 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/Checkout/index.tsx +9 -5
- package/themes/kiosk/src/components/CustomerName/index.tsx +1 -1
- 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/OrderTypeCardSelector/index.tsx +8 -10
- package/themes/kiosk/src/components/PaymentOptions/index.tsx +121 -57
- package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
- package/themes/original/index.tsx +223 -219
- package/themes/original/src/components/AddressForm/index.tsx +14 -8
- package/themes/original/src/components/AppleLogin/index.tsx +4 -4
- package/themes/original/src/components/BusinessBasicInformation/index.tsx +1 -1
- package/themes/original/src/components/BusinessController/index.tsx +4 -2
- package/themes/original/src/components/BusinessItemAccordion/index.tsx +10 -4
- package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +103 -92
- package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +7 -3
- package/themes/original/src/components/BusinessListingSearch/index.tsx +8 -13
- package/themes/original/src/components/BusinessPreorder/index.tsx +34 -15
- package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +73 -70
- package/themes/original/src/components/BusinessProductsList/index.tsx +6 -7
- package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
- package/themes/original/src/components/BusinessProductsListing/index.tsx +10 -6
- package/themes/original/src/components/BusinessTypeFilter/index.tsx +9 -8
- package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
- package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
- package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
- package/themes/original/src/components/Cart/index.tsx +48 -13
- package/themes/original/src/components/CartContent/index.tsx +2 -3
- package/themes/original/src/components/Checkout/index.tsx +130 -89
- package/themes/original/src/components/Favorite/index.tsx +1 -5
- package/themes/original/src/components/ForgotPasswordForm/index.tsx +1 -2
- package/themes/original/src/components/GoogleMap/index.tsx +6 -5
- package/themes/original/src/components/Help/functions.tsx +76 -0
- package/themes/original/src/components/Help/index.tsx +74 -29
- package/themes/original/src/components/Help/styles.tsx +4 -1
- package/themes/original/src/components/HelpOptions/index.tsx +44 -0
- package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
- package/themes/original/src/components/Home/index.tsx +35 -16
- package/themes/original/src/components/LoginForm/index.tsx +12 -5
- package/themes/original/src/components/MessageListing/index.tsx +1 -1
- package/themes/original/src/components/Messages/index.tsx +20 -13
- package/themes/original/src/components/MomentOption/TimeListItem.tsx +56 -0
- package/themes/original/src/components/MomentOption/index.tsx +68 -50
- package/themes/original/src/components/MomentSelector/index.tsx +5 -2
- package/themes/original/src/components/MultiCheckout/index.tsx +76 -35
- package/themes/original/src/components/MyOrders/index.tsx +2 -2
- package/themes/original/src/components/NavBar/index.tsx +6 -2
- package/themes/original/src/components/NotFoundSource/index.tsx +40 -39
- package/themes/original/src/components/NotFoundSource/styles.tsx +18 -9
- package/themes/original/src/components/OrderDetails/OrderEta.tsx +4 -3
- package/themes/original/src/components/OrderDetails/OrderHistory.tsx +11 -4
- package/themes/original/src/components/OrderDetails/index.tsx +44 -19
- package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
- package/themes/original/src/components/OrderProgress/index.tsx +4 -3
- package/themes/original/src/components/OrderSummary/index.tsx +32 -11
- package/themes/original/src/components/OrderTypeSelector/index.tsx +4 -3
- package/themes/original/src/components/OrdersOption/index.tsx +3 -6
- package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
- package/themes/original/src/components/PaymentOptions/index.tsx +471 -459
- package/themes/original/src/components/PhoneInputNumber/index.tsx +92 -7
- package/themes/original/src/components/ProductForm/ActionButton.tsx +6 -10
- package/themes/original/src/components/ProductItemAccordion/index.tsx +28 -37
- package/themes/original/src/components/ProductOptionSubOption/index.tsx +15 -14
- package/themes/original/src/components/ServiceForm/index.tsx +1 -1
- package/themes/original/src/components/SignupForm/index.tsx +41 -24
- package/themes/original/src/components/SingleOrderCard/index.tsx +7 -4
- package/themes/original/src/components/SingleProductCard/index.tsx +3 -4
- package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
- package/themes/original/src/components/StripeCardsList/index.tsx +9 -4
- package/themes/original/src/components/StripeElementsForm/index.tsx +2 -2
- package/themes/original/src/components/StripeElementsForm/naked.tsx +1 -1
- package/themes/original/src/components/TaxInformation/index.tsx +3 -2
- package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +7 -2
- package/themes/original/src/components/UserDetails/index.tsx +17 -16
- package/themes/original/src/components/UserFormDetails/index.tsx +109 -67
- package/themes/original/src/components/UserProfile/index.tsx +9 -1
- package/themes/original/src/components/UserVerification/index.tsx +18 -5
- package/themes/original/src/components/shared/OAlert.tsx +2 -1
- package/themes/original/src/components/shared/OButton.tsx +2 -2
- package/themes/original/src/components/shared/OInput.tsx +4 -8
- package/themes/original/src/components/shared/OModal.tsx +7 -2
- package/themes/original/src/types/index.tsx +699 -691
- package/themes/original/src/utils/index.tsx +29 -0
- package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
- package/themes/original/src/components/HelpAccountAndPayment/index.tsx +0 -62
- package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +0 -12
- package/themes/original/src/components/HelpGuide/index.tsx +0 -68
- package/themes/original/src/components/HelpGuide/styles.tsx +0 -12
- package/themes/original/src/components/HelpOrder/index.tsx +0 -71
- package/themes/original/src/components/HelpOrder/styles.tsx +0 -13
|
@@ -29,7 +29,8 @@ import {
|
|
|
29
29
|
TimeItem
|
|
30
30
|
} from './styles';
|
|
31
31
|
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
32
|
-
import {
|
|
32
|
+
import { monthsEnum, setLocalMoment } from '../../utils';
|
|
33
|
+
import { TimeListItem } from './TimeListItem';
|
|
33
34
|
|
|
34
35
|
const MomentOptionUI = (props: MomentOptionParams) => {
|
|
35
36
|
const {
|
|
@@ -161,6 +162,8 @@ const MomentOptionUI = (props: MomentOptionParams) => {
|
|
|
161
162
|
const [datesWhitelist, setDateWhitelist] = useState<any>([{ start: null, end: null }])
|
|
162
163
|
const [selectDate, setSelectedDate] = useState<any>(dateSelected)
|
|
163
164
|
const [timeList, setTimeList] = useState<any>(hoursList)
|
|
165
|
+
const [nextTime, setNextTime] = useState(null)
|
|
166
|
+
|
|
164
167
|
const goToBack = () => navigation?.canGoBack() && navigation.goBack();
|
|
165
168
|
|
|
166
169
|
const _handleAsap = () => {
|
|
@@ -256,7 +259,7 @@ const MomentOptionUI = (props: MomentOptionParams) => {
|
|
|
256
259
|
setDateWhitelist([{ start: _minDate, end: _maxDate }])
|
|
257
260
|
}
|
|
258
261
|
}
|
|
259
|
-
}, [JSON.stringify(datesList), preorderMinimumDays, preorderMaximumDays
|
|
262
|
+
}, [JSON.stringify(datesList), preorderMinimumDays, preorderMaximumDays])
|
|
260
263
|
|
|
261
264
|
useEffect(() => {
|
|
262
265
|
if (dateSelected) {
|
|
@@ -278,13 +281,21 @@ const MomentOptionUI = (props: MomentOptionParams) => {
|
|
|
278
281
|
let _timeLists = []
|
|
279
282
|
const schedule = business && getActualSchedule()
|
|
280
283
|
if (!schedule && business) {
|
|
284
|
+
setTimeList([])
|
|
281
285
|
return
|
|
282
286
|
}
|
|
283
287
|
_timeLists = hoursList
|
|
284
|
-
.filter(hour =>
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
+
.filter(hour => {
|
|
289
|
+
return (Object.keys(business || {})?.length === 0 || schedule?.lapses?.some((lapse: any) => {
|
|
290
|
+
const openHour = lapse.open.hour < 10 ? `0${lapse.open.hour}` : lapse.open.hour
|
|
291
|
+
const openMinute = lapse.open.minute < 10 ? `0${lapse.open.minute}` : lapse.open.minute
|
|
292
|
+
const closeHour = lapse.close.hour < 10 ? `0${lapse.close.hour}` : lapse.close.hour
|
|
293
|
+
const closeMinute = lapse.close.minute < 10 ? `0${lapse.close.minute}` : lapse.close.minute
|
|
294
|
+
return moment(dateSelected + ` ${hour.startTime}`) >= moment(dateSelected + ` ${openHour}:${openMinute}`).add(preorderLeadTime, 'minutes') && moment(dateSelected + ` ${hour.endTime}`) <= moment(dateSelected + ` ${closeHour}:${closeMinute}`)
|
|
295
|
+
})) &&
|
|
296
|
+
(moment(dateSelected + ` ${hour.startTime}`) < moment(dateSelected + ` ${hour.endTime}`)) &&
|
|
297
|
+
(moment().add(preorderLeadTime, 'minutes') < moment(dateSelected + ` ${hour.startTime}`) || !cateringPreorder)
|
|
298
|
+
})
|
|
288
299
|
.map(hour => {
|
|
289
300
|
return {
|
|
290
301
|
value: hour.startTime,
|
|
@@ -321,12 +332,29 @@ const MomentOptionUI = (props: MomentOptionParams) => {
|
|
|
321
332
|
}
|
|
322
333
|
}))
|
|
323
334
|
}
|
|
324
|
-
}, [dateSelected,
|
|
335
|
+
}, [dateSelected, hoursList?.length, JSON.stringify(datesWhitelist), JSON.stringify(business)])
|
|
325
336
|
|
|
326
337
|
useEffect(() => {
|
|
327
338
|
setLocalMoment(moment, t)
|
|
328
339
|
}, [])
|
|
329
340
|
|
|
341
|
+
useEffect(() => {
|
|
342
|
+
if (preorderMinimumDays === 0 && preorderLeadTime === 0) return
|
|
343
|
+
const isToday = dateSelected === moment().format('YYYY-MM-DD')
|
|
344
|
+
if (isCart && isToday && !orderState?.loading && timeList?.length > 0) {
|
|
345
|
+
setNextTime(timeList?.[0] ?? null)
|
|
346
|
+
}
|
|
347
|
+
}, [timeList?.length])
|
|
348
|
+
|
|
349
|
+
useEffect(() => {
|
|
350
|
+
if (nextTime?.value && timeList?.length > 0 && isCart && !orderState?.loading && !(preorderMinimumDays === 0 && preorderLeadTime === 0)) {
|
|
351
|
+
const notime = timeList?.filter((_: any, i: number) => i !== 0)?.find?.((time: any) => time?.value === timeSelected)
|
|
352
|
+
if (!notime) {
|
|
353
|
+
handleChangeTime(nextTime?.value)
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}, [nextTime?.value])
|
|
357
|
+
|
|
330
358
|
return (
|
|
331
359
|
<>
|
|
332
360
|
<Container
|
|
@@ -349,7 +377,7 @@ const MomentOptionUI = (props: MomentOptionParams) => {
|
|
|
349
377
|
titleWrapStyle={{ paddingHorizontal: 0 }}
|
|
350
378
|
/>
|
|
351
379
|
)}
|
|
352
|
-
{(preorderMinimumDays === 0 && preorderLeadTime === 0) || !cateringPreorder && (
|
|
380
|
+
{((preorderMinimumDays === 0 && preorderLeadTime === 0) || !cateringPreorder) && (
|
|
353
381
|
<WrapSelectOption
|
|
354
382
|
onPress={() => _handleAsap()}
|
|
355
383
|
disabled={orderState.loading} style={{ alignItems: 'flex-start' }}>
|
|
@@ -402,23 +430,23 @@ const MomentOptionUI = (props: MomentOptionParams) => {
|
|
|
402
430
|
style={styles.calendar}
|
|
403
431
|
calendarHeaderContainerStyle={styles.calendarHeaderContainer}
|
|
404
432
|
calendarHeaderStyle={styles.calendarHeader}
|
|
405
|
-
dateNumberStyle={styles.dateNumber}
|
|
406
|
-
dateNameStyle={styles.dateName}
|
|
407
433
|
iconContainer={{ flex: 0.1 }}
|
|
408
|
-
highlightDateNameStyle={styles.highlightDateName}
|
|
409
|
-
highlightDateNumberStyle={styles.highlightDateNumber}
|
|
410
434
|
dayContainerStyle={{ height: '100%' }}
|
|
411
435
|
highlightDateContainerStyle={{ height: '100%' }}
|
|
412
436
|
calendarHeaderFormat='MMMM, YYYY'
|
|
413
437
|
iconStyle={{ borderWidth: 1 }}
|
|
414
438
|
selectedDate={dateSelected}
|
|
415
439
|
datesWhitelist={datesWhitelist}
|
|
440
|
+
highlightDateNumberStyle={styles.highlightDateNumber}
|
|
441
|
+
highlightDateNameStyle={styles.highlightDateName}
|
|
416
442
|
minDate={moment()}
|
|
417
443
|
maxDate={cateringPreorder ? moment().add(preorderMaximumDays, 'days') : undefined}
|
|
418
444
|
disabledDateNameStyle={styles.disabledDateName}
|
|
419
445
|
disabledDateNumberStyle={styles.disabledDateNumber}
|
|
420
446
|
disabledDateOpacity={0.6}
|
|
421
|
-
|
|
447
|
+
dateNumberStyle={styles.dateNumber}
|
|
448
|
+
dateNameStyle={styles.dateName}
|
|
449
|
+
onDateSelected={(date: any) => onSelectDate(date)}
|
|
422
450
|
leftSelector={<LeftSelector />}
|
|
423
451
|
rightSelector={<RightSelector />}
|
|
424
452
|
/>
|
|
@@ -426,44 +454,34 @@ const MomentOptionUI = (props: MomentOptionParams) => {
|
|
|
426
454
|
</View>
|
|
427
455
|
)}
|
|
428
456
|
<TimeListWrapper nestedScrollEnabled={true} cateringPreorder={cateringPreorder}>
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
<
|
|
433
|
-
|
|
457
|
+
{timeList?.length > 0 ? (
|
|
458
|
+
<TimeContentWrapper>
|
|
459
|
+
{timeList.map((time: any, i: number) => (
|
|
460
|
+
<TimeListItem
|
|
461
|
+
key={i}
|
|
462
|
+
time={time}
|
|
463
|
+
selectedTime={selectedTime}
|
|
464
|
+
handleChangeTimeSelected={handleChangeTimeSelected}
|
|
434
465
|
cateringPreorder={cateringPreorder}
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
size={cateringPreorder ? 18 : 16}
|
|
455
|
-
color={selectedTime === time.value ? theme.colors.primary : theme.colors.textNormal}
|
|
456
|
-
style={{
|
|
457
|
-
lineHeight: 24
|
|
458
|
-
}}
|
|
459
|
-
>{time.text} {cateringPreorder && `- ${time.endText}`}</OText>
|
|
460
|
-
</TimeItem>
|
|
461
|
-
</Pressable>
|
|
462
|
-
))}
|
|
463
|
-
{timeList.length % 3 === 2 && (
|
|
464
|
-
<TimeItem style={{ backgroundColor: 'transparent' }} />
|
|
465
|
-
)}
|
|
466
|
-
</TimeContentWrapper>
|
|
466
|
+
/>
|
|
467
|
+
))}
|
|
468
|
+
{timeList.length % 3 === 2 && (
|
|
469
|
+
<TimeItem style={{ backgroundColor: 'transparent' }} />
|
|
470
|
+
)}
|
|
471
|
+
</TimeContentWrapper>
|
|
472
|
+
) : (
|
|
473
|
+
<OText
|
|
474
|
+
size={16}
|
|
475
|
+
style={{
|
|
476
|
+
fontWeight: '600',
|
|
477
|
+
lineHeight: 24,
|
|
478
|
+
marginBottom: 12,
|
|
479
|
+
textAlign: 'center'
|
|
480
|
+
}}
|
|
481
|
+
>
|
|
482
|
+
{t('ERROR_ADD_PRODUCT_BUSINESS_CLOSED', 'The business is closed at the moment')}
|
|
483
|
+
</OText>
|
|
484
|
+
)}
|
|
467
485
|
</TimeListWrapper>
|
|
468
486
|
</OrderTimeWrapper>
|
|
469
487
|
)}
|
|
@@ -5,7 +5,8 @@ import { useTheme } from 'styled-components/native'
|
|
|
5
5
|
import {
|
|
6
6
|
MomentOption as MomentOptionController,
|
|
7
7
|
useConfig,
|
|
8
|
-
useUtils
|
|
8
|
+
useUtils,
|
|
9
|
+
useLanguage
|
|
9
10
|
} from 'ordering-components/native'
|
|
10
11
|
import { useSafeAreaInsets } from 'react-native-safe-area-context'
|
|
11
12
|
import IconAntDesign from 'react-native-vector-icons/AntDesign'
|
|
@@ -26,6 +27,7 @@ const MomentSelectorUI = (props: any) => {
|
|
|
26
27
|
const { top } = useSafeAreaInsets()
|
|
27
28
|
const [{ configs }] = useConfig()
|
|
28
29
|
const [{ parseTime }] = useUtils()
|
|
30
|
+
const [, t] = useLanguage()
|
|
29
31
|
|
|
30
32
|
const [customizedDateList, setCustomizedDateList] = useState([])
|
|
31
33
|
const [customizedTimeList, setCustomizedTimeList] = useState([])
|
|
@@ -130,6 +132,7 @@ const MomentSelectorUI = (props: any) => {
|
|
|
130
132
|
<View style={styles.selectWrapper}>
|
|
131
133
|
<SelectDropdown
|
|
132
134
|
defaultValue={customizedTimeList?.find((item: any) => item.key === timeSelected)}
|
|
135
|
+
defaultButtonText={t('SELECT_A_TIME_OPTION', 'Select an option')}
|
|
133
136
|
data={customizedTimeList}
|
|
134
137
|
onSelect={(selectedItem, index) => {
|
|
135
138
|
handleChangeTime(selectedItem.key)
|
|
@@ -194,4 +197,4 @@ export const MomentSelector = (props: any) => {
|
|
|
194
197
|
maxDate: currentDate
|
|
195
198
|
}
|
|
196
199
|
return <MomentOptionController {...businessPreorderProps} />
|
|
197
|
-
}
|
|
200
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useState, useEffect, useCallback } from 'react'
|
|
1
|
+
import React, { useState, useEffect, useCallback, useMemo } from 'react'
|
|
2
2
|
import {
|
|
3
3
|
useLanguage,
|
|
4
4
|
useConfig,
|
|
@@ -70,7 +70,8 @@ const MultiCheckoutUI = (props: any) => {
|
|
|
70
70
|
walletState,
|
|
71
71
|
onNavigationRedirectReplace,
|
|
72
72
|
merchantId,
|
|
73
|
-
cartsInvalid
|
|
73
|
+
cartsInvalid,
|
|
74
|
+
checkoutFieldsState
|
|
74
75
|
} = props
|
|
75
76
|
|
|
76
77
|
const theme = useTheme();
|
|
@@ -96,11 +97,13 @@ const MultiCheckoutUI = (props: any) => {
|
|
|
96
97
|
const [{ parsePrice, parseDate }] = useUtils();
|
|
97
98
|
const [{ options, carts, loading }, { confirmCart }] = useOrder();
|
|
98
99
|
const [validationFields] = useValidationFields();
|
|
99
|
-
const [{ user }, { login }] = useSession()
|
|
100
|
+
const [{ user, loading: userLoading }, { login }] = useSession()
|
|
100
101
|
|
|
102
|
+
const notFields = ['coupon', 'driver_tip', 'mobile_phone', 'address', 'zipcode', 'address_notes', 'comments']
|
|
101
103
|
const configTypes = configs?.order_types_allowed?.value.split('|').map((value: any) => Number(value)) || []
|
|
102
104
|
const isPreOrder = configs?.preorder_status_enabled?.value === '1'
|
|
103
105
|
const isMultiDriverTips = configs?.checkout_multi_business_enabled?.value === '1'
|
|
106
|
+
const isGuestCheckoutEnabled = configs?.guest_checkout_enabled?.value === '1'
|
|
104
107
|
const walletCarts = (Object.values(carts)?.filter((cart: any) => cart?.products && cart?.products?.length && cart?.status !== 2 && cart?.valid_schedule && cart?.valid_products && cart?.valid_address && cart?.valid_maximum && cart?.valid_minimum && cart?.wallets) || null) || []
|
|
105
108
|
const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
|
|
106
109
|
const cartsToShow = openCarts?.length > 0 ? openCarts : cartsInvalid
|
|
@@ -121,6 +124,7 @@ const MultiCheckoutUI = (props: any) => {
|
|
|
121
124
|
|
|
122
125
|
const creditPointGeneralPlan = loyaltyPlansState?.result?.find((loyal: any) => loyal.type === 'credit_point')
|
|
123
126
|
const loyalBusinessAvailable = creditPointGeneralPlan?.businesses?.filter((b: any) => b.accumulates) ?? []
|
|
127
|
+
const checkoutFields = useMemo(() => checkoutFieldsState?.fields?.filter((field: any) => field.order_type_id === options?.type), [checkoutFieldsState, options])
|
|
124
128
|
|
|
125
129
|
const accumulationRateBusiness = (businessId: number) => {
|
|
126
130
|
const value = loyalBusinessAvailable?.find((loyal: any) => loyal.business_id === businessId)?.accumulation_rate ?? 0
|
|
@@ -159,7 +163,8 @@ const MultiCheckoutUI = (props: any) => {
|
|
|
159
163
|
const isDisablePlaceOrderButton = cartGroup?.loading || placing || (!(paymethodSelected?.paymethod_id || paymethodSelected?.wallet_id) && cartGroup?.result?.balance > 0) ||
|
|
160
164
|
(paymethodSelected?.paymethod?.gateway === 'stripe' && !paymethodSelected?.paymethod_data) ||
|
|
161
165
|
walletCarts.length > 0
|
|
162
|
-
|| (methodsPay.includes(paymethodSelected?.gateway) && (!methodPaySupported.enabled || methodPaySupported.loading)) || openCarts?.length === 0
|
|
166
|
+
|| (methodsPay.includes(paymethodSelected?.gateway) && (!methodPaySupported.enabled || methodPaySupported.loading)) || openCarts?.length === 0 ||
|
|
167
|
+
(!isGuestCheckoutEnabled && !!user?.guest_id)
|
|
163
168
|
|
|
164
169
|
const handleMomentClick = () => {
|
|
165
170
|
if (isPreOrder) {
|
|
@@ -169,35 +174,55 @@ const MultiCheckoutUI = (props: any) => {
|
|
|
169
174
|
|
|
170
175
|
const checkValidationFields = () => {
|
|
171
176
|
setUserErrors([])
|
|
172
|
-
const errors = []
|
|
173
|
-
const
|
|
174
|
-
const _requiredFields:
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
177
|
+
const errors: Array<string> = []
|
|
178
|
+
const userSelected = user
|
|
179
|
+
const _requiredFields: Array<string> = []
|
|
180
|
+
Object.values(checkoutFieldsState?.fields).map((field: any) => {
|
|
181
|
+
if (options?.type === field?.order_type_id &&
|
|
182
|
+
field?.enabled &&
|
|
183
|
+
field?.required &&
|
|
184
|
+
!notFields.includes(field?.validation_field?.code)
|
|
185
|
+
) {
|
|
186
|
+
if (userSelected && !userSelected[field?.validation_field?.code]) {
|
|
187
|
+
_requiredFields.push(field?.validation_field?.code)
|
|
180
188
|
}
|
|
181
189
|
}
|
|
182
190
|
})
|
|
183
|
-
|
|
191
|
+
const mobilePhoneField: any = Object.values(checkoutFieldsState?.fields)?.find((field: any) => field?.order_type_id === options?.type && field?.validation_field?.code === 'mobile_phone')
|
|
184
192
|
if (
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
193
|
+
userSelected &&
|
|
194
|
+
!userSelected?.cellphone &&
|
|
195
|
+
((mobilePhoneField?.enabled &&
|
|
196
|
+
mobilePhoneField?.required) ||
|
|
188
197
|
configs?.verification_phone_required?.value === '1')
|
|
189
198
|
) {
|
|
190
199
|
_requiredFields.push('cellphone')
|
|
191
200
|
}
|
|
192
201
|
setRequiredFields(_requiredFields)
|
|
193
202
|
|
|
194
|
-
if (phoneUpdate) {
|
|
195
|
-
errors.push(t('NECESSARY_UPDATE_COUNTRY_PHONE_CODE', 'It is necessary to update your phone number'))
|
|
196
|
-
}
|
|
197
|
-
|
|
198
203
|
setUserErrors(errors)
|
|
199
204
|
}
|
|
200
205
|
|
|
206
|
+
const checkGuestValidationFields = () => {
|
|
207
|
+
const userSelected = user
|
|
208
|
+
const _requiredFields = checkoutFieldsState?.fields
|
|
209
|
+
.filter((field) => (field?.order_type_id === options?.type) && field?.enabled && field?.required_with_guest &&
|
|
210
|
+
!notFields.includes(field?.validation_field?.code) &&
|
|
211
|
+
userSelected && !userSelected[field?.validation_field?.code])
|
|
212
|
+
const requiredFieldsCode = _requiredFields.map((item) => item?.validation_field?.code)
|
|
213
|
+
const guestCheckoutCellPhone = checkoutFieldsState?.fields?.find((field) => field.order_type_id === options?.type && field?.validation_field?.code === 'mobile_phone')
|
|
214
|
+
if (
|
|
215
|
+
userSelected &&
|
|
216
|
+
!userSelected?.cellphone &&
|
|
217
|
+
((guestCheckoutCellPhone?.enabled &&
|
|
218
|
+
guestCheckoutCellPhone?.required_with_guest) ||
|
|
219
|
+
configs?.verification_phone_required?.value === '1')
|
|
220
|
+
) {
|
|
221
|
+
requiredFieldsCode.push('cellphone')
|
|
222
|
+
}
|
|
223
|
+
setRequiredFields(requiredFieldsCode)
|
|
224
|
+
}
|
|
225
|
+
|
|
201
226
|
const togglePhoneUpdate = (val: boolean) => {
|
|
202
227
|
setPhoneUpdate(val)
|
|
203
228
|
}
|
|
@@ -208,7 +233,7 @@ const MultiCheckoutUI = (props: any) => {
|
|
|
208
233
|
return
|
|
209
234
|
}
|
|
210
235
|
|
|
211
|
-
if (!userErrors.length &&
|
|
236
|
+
if (!userErrors.length && !requiredFields?.length) {
|
|
212
237
|
handleGroupPlaceOrder && handleGroupPlaceOrder(confirmPayment)
|
|
213
238
|
return
|
|
214
239
|
}
|
|
@@ -255,10 +280,13 @@ const MultiCheckoutUI = (props: any) => {
|
|
|
255
280
|
}
|
|
256
281
|
|
|
257
282
|
useEffect(() => {
|
|
258
|
-
if (
|
|
283
|
+
if (checkoutFieldsState?.loading || userLoading) return
|
|
284
|
+
if (user?.guest_id) {
|
|
285
|
+
checkGuestValidationFields()
|
|
286
|
+
} else {
|
|
259
287
|
checkValidationFields()
|
|
260
288
|
}
|
|
261
|
-
}, [
|
|
289
|
+
}, [checkoutFieldsState, user, options?.type])
|
|
262
290
|
|
|
263
291
|
useEffect(() => {
|
|
264
292
|
if (cartsToShow?.length === 1) {
|
|
@@ -399,20 +427,19 @@ const MultiCheckoutUI = (props: any) => {
|
|
|
399
427
|
/>
|
|
400
428
|
<OButton
|
|
401
429
|
text={t('LOGIN', 'Login')}
|
|
402
|
-
textStyle={{ color: theme.colors.primary }}
|
|
403
|
-
bgColor={theme.colors.white}
|
|
404
|
-
borderColor={theme.colors.primary}
|
|
405
430
|
style={{ borderRadius: 7.6, marginTop: 20 }}
|
|
406
431
|
onClick={() => setOpenModal({ ...openModal, login: true })}
|
|
407
432
|
/>
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
433
|
+
{isGuestCheckoutEnabled && (
|
|
434
|
+
<OButton
|
|
435
|
+
text={t('CONTINUE_AS_GUEST', 'Continue as guest')}
|
|
436
|
+
textStyle={{ color: theme.colors.black }}
|
|
437
|
+
bgColor={theme.colors.white}
|
|
438
|
+
borderColor={theme.colors.black}
|
|
439
|
+
style={{ borderRadius: 7.6, marginTop: 20 }}
|
|
440
|
+
onClick={() => setAllowedGuest(true)}
|
|
441
|
+
/>
|
|
442
|
+
)}
|
|
416
443
|
</View>
|
|
417
444
|
) : (
|
|
418
445
|
<UserDetails
|
|
@@ -423,6 +450,9 @@ const MultiCheckoutUI = (props: any) => {
|
|
|
423
450
|
isCheckout
|
|
424
451
|
phoneUpdate={phoneUpdate}
|
|
425
452
|
togglePhoneUpdate={togglePhoneUpdate}
|
|
453
|
+
isOrderTypeValidationField
|
|
454
|
+
requiredFields={requiredFields}
|
|
455
|
+
checkoutFields={checkoutFields}
|
|
426
456
|
/>
|
|
427
457
|
)}
|
|
428
458
|
</ChUserDetails>
|
|
@@ -617,6 +647,14 @@ const MultiCheckoutUI = (props: any) => {
|
|
|
617
647
|
{t('WARNING_INVALID_PRODUCTS_CHECKOUT', 'To continue with your checkout, please remove from your cart the products that are not available.')}
|
|
618
648
|
</OText>
|
|
619
649
|
)}
|
|
650
|
+
{(!isGuestCheckoutEnabled && !!user?.guest_id) && (
|
|
651
|
+
<OText
|
|
652
|
+
color={theme.colors.error}
|
|
653
|
+
size={12}
|
|
654
|
+
>
|
|
655
|
+
{t('LOGIN_SIGN_UP_COMPLETE_ORDER', 'Login/Sign up to complete your order.')}
|
|
656
|
+
</OText>
|
|
657
|
+
)}
|
|
620
658
|
</ChContainer>
|
|
621
659
|
<OModal
|
|
622
660
|
open={openModal.signup}
|
|
@@ -659,9 +697,12 @@ const MultiCheckoutUI = (props: any) => {
|
|
|
659
697
|
isEdit
|
|
660
698
|
phoneUpdate={phoneUpdate}
|
|
661
699
|
togglePhoneUpdate={togglePhoneUpdate}
|
|
662
|
-
requiredFields={requiredFields}
|
|
663
700
|
hideUpdateButton
|
|
664
701
|
handlePlaceOrderAsGuest={handlePlaceOrderAsGuest}
|
|
702
|
+
isCheckoutPlace
|
|
703
|
+
isOrderTypeValidationField
|
|
704
|
+
requiredFields={requiredFields}
|
|
705
|
+
checkoutFields={checkoutFields}
|
|
665
706
|
onClose={() => {
|
|
666
707
|
setIsOpen(false)
|
|
667
708
|
handlePlaceOrder()
|
|
@@ -203,9 +203,9 @@ export const MyOrders = (props: any) => {
|
|
|
203
203
|
setOrdersLength={setOrdersLength}
|
|
204
204
|
/>
|
|
205
205
|
)}
|
|
206
|
-
|
|
206
|
+
|
|
207
207
|
{selectedOption === 'giftCards' && (
|
|
208
|
-
<View style={{ paddingHorizontal: 20
|
|
208
|
+
<View style={{ paddingHorizontal: 20 }}>
|
|
209
209
|
<GiftCardOrdersList
|
|
210
210
|
onNavigationRedirect={props?.onNavigationRedirect}
|
|
211
211
|
/>
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
|
|
1
4
|
import * as React from 'react'
|
|
2
5
|
import styled, { useTheme } from 'styled-components/native'
|
|
3
6
|
import { OButton, OIcon, OText } from '../shared'
|
|
@@ -130,8 +133,9 @@ NavBar.defaultProps = {
|
|
|
130
133
|
textAlign: 'center'
|
|
131
134
|
};
|
|
132
135
|
|
|
133
|
-
const areEqual = (prevProps: { route?: any
|
|
134
|
-
return prevProps.route === nextProps.route
|
|
136
|
+
const areEqual = (prevProps: { route?: any, title?: string }, nextProps: { route?: any, title?: string }) => {
|
|
137
|
+
return prevProps.route === nextProps.route &&
|
|
138
|
+
JSON.stringify(prevProps.title) === JSON.stringify(nextProps.title)
|
|
135
139
|
return true
|
|
136
140
|
}
|
|
137
141
|
|
|
@@ -5,48 +5,49 @@ import { NotFoundSourceParams } from '../../types'
|
|
|
5
5
|
import { useTheme } from 'styled-components/native';
|
|
6
6
|
import Foundation from 'react-native-vector-icons/Foundation'
|
|
7
7
|
import {
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
NotFound,
|
|
9
|
+
NotFoundImage
|
|
10
10
|
} from './styles'
|
|
11
11
|
|
|
12
12
|
export const NotFoundSource = (props: NotFoundSourceParams) => {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
const {
|
|
14
|
+
hideImage,
|
|
15
|
+
content,
|
|
16
|
+
btnTitle,
|
|
17
|
+
btnStyle,
|
|
18
|
+
conditioned,
|
|
19
|
+
onClickButton,
|
|
20
|
+
simple
|
|
21
|
+
} = props
|
|
21
22
|
|
|
22
|
-
|
|
23
|
+
const theme = useTheme();
|
|
23
24
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
25
|
+
return (
|
|
26
|
+
<NotFound simple={simple}>
|
|
27
|
+
{!hideImage && !simple && (
|
|
28
|
+
<NotFoundImage>
|
|
29
|
+
<Foundation
|
|
30
|
+
name='page-search'
|
|
31
|
+
color={theme.colors.primary}
|
|
32
|
+
size={60}
|
|
33
|
+
style={{ marginBottom: 10 }}
|
|
34
|
+
/>
|
|
35
|
+
</NotFoundImage>
|
|
36
|
+
)}
|
|
37
|
+
{content && conditioned && <OText color={theme.colors.disabled} size={16} style={{ textAlign: 'center' }}>{content}</OText>}
|
|
38
|
+
{content && !conditioned && <OText color={theme.colors.disabled} size={16} style={{ textAlign: 'center' }}>{content}</OText>}
|
|
39
|
+
{!onClickButton && props.children && (
|
|
40
|
+
props.children
|
|
41
|
+
)}
|
|
42
|
+
{onClickButton && (
|
|
43
|
+
<View style={{ marginTop: 10, width: '100%' }}>
|
|
44
|
+
<OButton
|
|
45
|
+
style={{ width: '100%', height: 50, ...btnStyle }}
|
|
46
|
+
onClick={() => onClickButton()}
|
|
47
|
+
text={btnTitle}
|
|
48
|
+
/>
|
|
49
|
+
</View>
|
|
50
|
+
)}
|
|
51
|
+
</NotFound>
|
|
52
|
+
)
|
|
52
53
|
}
|
|
@@ -1,14 +1,23 @@
|
|
|
1
|
-
import styled from 'styled-components/native'
|
|
1
|
+
import styled, { css } from 'styled-components/native'
|
|
2
2
|
|
|
3
3
|
export const NotFound = styled.View`
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
${(props: any) => props.simple
|
|
5
|
+
? css`
|
|
6
|
+
background-color: ${(props: any) => props.theme.colors?.white};
|
|
7
|
+
border-radius: 10px;
|
|
8
|
+
padding: 15px;
|
|
9
|
+
padding-horizontal: 20px;
|
|
10
|
+
border: 1px ${(props: any) => props.theme.colors?.border};
|
|
11
|
+
` : css`
|
|
12
|
+
display: flex;
|
|
13
|
+
flex-direction: column;
|
|
14
|
+
justify-content: center;
|
|
15
|
+
align-items: center;
|
|
16
|
+
width: 100%;
|
|
17
|
+
height: auto;
|
|
18
|
+
margin: auto auto;
|
|
19
|
+
padding: 10px;
|
|
20
|
+
`}
|
|
12
21
|
`
|
|
13
22
|
|
|
14
23
|
export const NotFoundImage = styled.View`
|
|
@@ -10,13 +10,14 @@ export const OrderEta = (props: any) => {
|
|
|
10
10
|
|
|
11
11
|
const [{ parseDate }] = useUtils()
|
|
12
12
|
const [estimatedDeliveryTime, setEstimatedDeliveryTime] = useState(null)
|
|
13
|
-
|
|
13
|
+
const deliveryTypes = [1, 7]
|
|
14
|
+
|
|
14
15
|
const getEstimatedDeliveryTime = () => {
|
|
15
16
|
let estimatedUtcTime = null
|
|
16
17
|
let totalEta = 0
|
|
17
18
|
if (order?.delivered_in) totalEta += order?.delivered_in
|
|
18
19
|
if (order?.prepared_in) totalEta += order?.prepared_in
|
|
19
|
-
if (order?.delivery_type
|
|
20
|
+
if (deliveryTypes?.includes?.(order?.delivery_type) && order?.eta_drive_time) {
|
|
20
21
|
totalEta += order?.eta_drive_time
|
|
21
22
|
}
|
|
22
23
|
|
|
@@ -57,7 +58,7 @@ export const OrderEta = (props: any) => {
|
|
|
57
58
|
}
|
|
58
59
|
estimatedUtcTime = moment.utc(_delivery).add(totalEta, 'minutes')
|
|
59
60
|
const _estimatedTime = outputFormat ? moment(estimatedUtcTime).local().format(outputFormat) : parseDate(estimatedUtcTime, { utc: false })
|
|
60
|
-
setEstimatedDeliveryTime(_estimatedTime)
|
|
61
|
+
setEstimatedDeliveryTime(order?.status === 13 ? parseDate(_delivery, { utc: !!order?.delivery_datetime_utc, outputFormat: outputFormat }) : _estimatedTime)
|
|
61
62
|
}
|
|
62
63
|
|
|
63
64
|
useEffect(() => {
|