ordering-ui-react-native 0.22.1 → 0.22.2-release
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +6 -7
- package/src/DeliveryApp.tsx +43 -1
- package/src/components/BusinessesListing/index.tsx +1 -1
- package/src/components/StripeMethodForm/index.tsx +4 -2
- package/src/components/VerifyPhone/styles.tsx +1 -2
- package/src/context/OfflineActions/index.tsx +236 -0
- package/src/types/index.tsx +2 -1
- package/themes/business/index.tsx +2 -0
- 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 +2 -1
- package/themes/business/src/components/Chat/index.tsx +15 -3
- package/themes/business/src/components/DriverMap/index.tsx +49 -27
- package/themes/business/src/components/FloatingButton/index.tsx +3 -2
- package/themes/business/src/components/GoogleMap/index.tsx +15 -8
- package/themes/business/src/components/LanguageSelector/index.tsx +2 -3
- package/themes/business/src/components/LanguageSelector/lang_country.json +515 -70
- package/themes/business/src/components/LogoutButton/index.tsx +1 -1
- package/themes/business/src/components/MapView/index.tsx +36 -17
- package/themes/business/src/components/NewOrderNotification/index.tsx +40 -27
- package/themes/business/src/components/OrderDetails/Business.tsx +54 -37
- package/themes/business/src/components/OrderDetails/Delivery.tsx +138 -55
- package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +125 -43
- package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +62 -24
- package/themes/business/src/components/OrderDetails/styles.tsx +39 -3
- package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +149 -68
- package/themes/business/src/components/OrderDetailsLogistic/index.tsx +3 -2
- package/themes/business/src/components/OrderSummary/index.tsx +210 -65
- package/themes/business/src/components/OrdersListManager/index.tsx +13 -1
- package/themes/business/src/components/OrdersOption/index.tsx +217 -156
- package/themes/business/src/components/PhoneInputNumber/index.tsx +8 -5
- package/themes/business/src/components/PreviousMessages/index.tsx +26 -3
- package/themes/business/src/components/PreviousOrders/OrderItem.tsx +39 -16
- package/themes/business/src/components/PreviousOrders/index.tsx +76 -66
- package/themes/business/src/components/PrinterEdition/MessageAlert.tsx +33 -0
- package/themes/business/src/components/PrinterEdition/index.tsx +431 -0
- package/themes/business/src/components/PrinterEdition/printerList.tsx +23 -0
- package/themes/business/src/components/PrinterEdition/styles.tsx +61 -0
- package/themes/business/src/components/PrinterSettings/index.tsx +226 -76
- package/themes/business/src/components/PrinterSettings/styles.tsx +20 -0
- 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 +16 -17
- package/themes/business/src/components/WebsocketStatus/index.tsx +2 -2
- package/themes/business/src/components/shared/OTextarea.tsx +8 -9
- package/themes/business/src/layouts/SafeAreaContainer.tsx +35 -19
- package/themes/business/src/types/index.tsx +14 -5
- package/themes/business/src/utils/index.tsx +25 -1
- 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 +6 -0
- 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/shared/OButton.tsx +5 -18
- package/themes/original/index.tsx +11 -0
- package/themes/original/src/components/AddressForm/index.tsx +32 -17
- package/themes/original/src/components/AddressList/index.tsx +8 -7
- package/themes/original/src/components/AnalyticsSegment/index.tsx +6 -6
- package/themes/original/src/components/AppleLogin/index.tsx +4 -4
- package/themes/original/src/components/BusinessBasicInformation/index.tsx +5 -8
- package/themes/original/src/components/BusinessController/index.tsx +5 -5
- package/themes/original/src/components/BusinessItemAccordion/index.tsx +13 -5
- package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +2 -3
- package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +1 -3
- package/themes/original/src/components/BusinessListingSearch/index.tsx +1 -2
- package/themes/original/src/components/BusinessPreorder/index.tsx +44 -32
- 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 +18 -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/index.tsx +1 -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 +38 -14
- package/themes/original/src/components/CartContent/index.tsx +2 -4
- package/themes/original/src/components/Checkout/index.tsx +110 -58
- package/themes/original/src/components/CitiesControl/index.tsx +0 -3
- package/themes/original/src/components/CouponControl/index.tsx +1 -3
- package/themes/original/src/components/DriverTips/index.tsx +1 -3
- package/themes/original/src/components/Favorite/index.tsx +1 -5
- package/themes/original/src/components/FavoriteList/index.tsx +0 -1
- package/themes/original/src/components/ForgotPasswordForm/index.tsx +5 -7
- package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +15 -17
- package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +3 -7
- package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +24 -32
- package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +7 -9
- package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +11 -12
- package/themes/original/src/components/GoogleMap/index.tsx +39 -18
- package/themes/original/src/components/Help/index.tsx +2 -0
- package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
- package/themes/original/src/components/Home/index.tsx +3 -11
- package/themes/original/src/components/LoginForm/Otp/index.tsx +0 -3
- package/themes/original/src/components/LoginForm/index.tsx +4 -7
- package/themes/original/src/components/MessageListing/index.tsx +2 -1
- package/themes/original/src/components/Messages/index.tsx +29 -17
- package/themes/original/src/components/MomentOption/TimeListItem.tsx +56 -0
- package/themes/original/src/components/MomentOption/index.tsx +79 -56
- package/themes/original/src/components/MomentSelector/index.tsx +1 -1
- package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +7 -3
- package/themes/original/src/components/MultiCheckout/index.tsx +55 -27
- package/themes/original/src/components/MultiOrdersDetails/index.tsx +1 -0
- package/themes/original/src/components/MyOrders/index.tsx +2 -2
- package/themes/original/src/components/NavBar/index.tsx +7 -4
- package/themes/original/src/components/NetworkError/index.tsx +0 -5
- package/themes/original/src/components/NotFoundSource/index.tsx +0 -3
- package/themes/original/src/components/OrderDetails/OrderEta.tsx +4 -3
- package/themes/original/src/components/OrderDetails/OrderHistory.tsx +13 -10
- package/themes/original/src/components/OrderDetails/index.tsx +44 -21
- package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
- package/themes/original/src/components/OrderProgress/index.tsx +5 -4
- package/themes/original/src/components/OrderSummary/index.tsx +29 -10
- package/themes/original/src/components/OrderTypeSelector/index.tsx +7 -6
- package/themes/original/src/components/OrdersOption/index.tsx +3 -6
- package/themes/original/src/components/PaymentOptionStripe/index.tsx +0 -5
- package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
- package/themes/original/src/components/PaymentOptions/index.tsx +10 -8
- package/themes/original/src/components/PlaceSpot/index.tsx +1 -3
- package/themes/original/src/components/PreviousOrders/index.tsx +1 -2
- package/themes/original/src/components/ProductForm/ActionButton.tsx +17 -20
- package/themes/original/src/components/ProductForm/index.tsx +107 -102
- package/themes/original/src/components/ProductItemAccordion/index.tsx +51 -44
- package/themes/original/src/components/ProductItemAccordion/styles.tsx +3 -4
- package/themes/original/src/components/ProductOptionSubOption/index.tsx +16 -8
- package/themes/original/src/components/ProfessionalProfile/index.tsx +4 -5
- package/themes/original/src/components/Promotions/index.tsx +6 -9
- package/themes/original/src/components/ReviewDriver/index.tsx +1 -1
- package/themes/original/src/components/ReviewOrder/index.tsx +2 -2
- package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
- package/themes/original/src/components/ReviewTrigger/index.tsx +2 -2
- package/themes/original/src/components/ServiceForm/index.tsx +52 -54
- package/themes/original/src/components/Sessions/index.tsx +3 -3
- package/themes/original/src/components/SignupForm/index.tsx +86 -78
- package/themes/original/src/components/SingleOrderCard/index.tsx +6 -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/StripeCardForm/index.tsx +0 -3
- package/themes/original/src/components/StripeCardsList/index.tsx +10 -3
- package/themes/original/src/components/StripeElementsForm/index.tsx +76 -62
- package/themes/original/src/components/StripeElementsForm/naked.tsx +48 -1
- package/themes/original/src/components/StripeRedirectForm/index.tsx +0 -3
- package/themes/original/src/components/TaxInformation/index.tsx +3 -2
- package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +10 -7
- package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +8 -3
- package/themes/original/src/components/UserDetails/index.tsx +17 -16
- package/themes/original/src/components/UserFormDetails/index.tsx +159 -133
- package/themes/original/src/components/UserProfile/index.tsx +9 -1
- package/themes/original/src/components/UserVerification/index.tsx +14 -4
- package/themes/original/src/components/Wallets/index.tsx +6 -3
- package/themes/original/src/components/WebsocketStatus/index.tsx +1 -4
- package/themes/original/src/components/shared/OAlert.tsx +2 -1
- package/themes/original/src/components/shared/OButton.tsx +5 -4
- 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 +5 -1
- package/themes/original/src/utils/index.tsx +30 -1
- package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useEffect, useState, useRef } from 'react';
|
|
2
|
-
import { StyleSheet, View, Keyboard, Modal } from 'react-native';
|
|
2
|
+
import { StyleSheet, View, Keyboard, Modal, Platform } from 'react-native';
|
|
3
3
|
import Spinner from 'react-native-loading-spinner-overlay';
|
|
4
4
|
import { useForm, Controller } from 'react-hook-form';
|
|
5
5
|
import { PhoneInputNumber } from '../PhoneInputNumber';
|
|
@@ -108,7 +108,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
108
108
|
|
|
109
109
|
const googleLoginEnabled = configs?.google_login_enabled?.value === '1' || !configs?.google_login_enabled?.enabled
|
|
110
110
|
const facebookLoginEnabled = configs?.facebook_login_enabled?.value === '1' || !configs?.facebook_login_enabled?.enabled
|
|
111
|
-
const appleLoginEnabled = configs?.apple_login_enabled?.value === '1' || !configs?.apple_login_enabled?.enabled
|
|
111
|
+
const appleLoginEnabled = Platform.OS === 'ios' && (configs?.apple_login_enabled?.value === '1' || !configs?.apple_login_enabled?.enabled)
|
|
112
112
|
|
|
113
113
|
const loginStyle = StyleSheet.create({
|
|
114
114
|
btnOutline: {
|
|
@@ -630,6 +630,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
630
630
|
/>
|
|
631
631
|
)
|
|
632
632
|
}
|
|
633
|
+
autoCapitalize='none'
|
|
633
634
|
value={value}
|
|
634
635
|
forwardRef={passwordRef}
|
|
635
636
|
onChange={(val: any) => onChange(val)}
|
|
@@ -706,9 +707,6 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
706
707
|
<OButton
|
|
707
708
|
onClick={handleSubmit(onSubmit)}
|
|
708
709
|
text={loginTab !== 'otp' ? loginButtonText : t('GET_VERIFY_CODE', 'Get verify code')}
|
|
709
|
-
bgColor={theme.colors.primary}
|
|
710
|
-
borderColor={theme.colors.primary}
|
|
711
|
-
textStyle={{ color: 'white' }}
|
|
712
710
|
imgRightSrc={null}
|
|
713
711
|
isLoading={formState.loading}
|
|
714
712
|
style={{ borderRadius: 7.6, marginTop: 10, marginBottom: 25 }}
|
|
@@ -747,7 +745,6 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
747
745
|
<OButton
|
|
748
746
|
onClick={handleVerifyCodeClick}
|
|
749
747
|
text={t('GET_VERIFY_CODE', 'Get Verify Code')}
|
|
750
|
-
borderColor={theme.colors.primary}
|
|
751
748
|
style={loginStyle.btnOutline}
|
|
752
749
|
imgRightSrc={null}
|
|
753
750
|
isLoading={isLoadingVerifyModal}
|
|
@@ -802,7 +799,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
802
799
|
handleSuccessGoogleLogin={handleSuccessFacebook}
|
|
803
800
|
/>
|
|
804
801
|
)}
|
|
805
|
-
{(configs?.apple_login_client_id?.value !== '' && configs?.
|
|
802
|
+
{(configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled && (
|
|
806
803
|
<AppleLogin
|
|
807
804
|
notificationState={notificationState}
|
|
808
805
|
handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
|
|
@@ -200,7 +200,7 @@ export const OrderListing = (props: OrdersOptionParams) => {
|
|
|
200
200
|
const OrderListingProps = {
|
|
201
201
|
...props,
|
|
202
202
|
UIComponent: OrdersOptionUI,
|
|
203
|
-
orderStatus: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23],
|
|
203
|
+
orderStatus: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26],
|
|
204
204
|
useDefualtSessionManager: true,
|
|
205
205
|
paginationSettings: {
|
|
206
206
|
initialPage: 1,
|
|
@@ -237,6 +237,7 @@ export const MessageListing = (props: MessageListingParams) => {
|
|
|
237
237
|
const [seletedOrder, setSeletedOrder] = useState<any>()
|
|
238
238
|
const [openMessages, setOpenMessges] = useState(false)
|
|
239
239
|
const [, t] = useLanguage()
|
|
240
|
+
const theme = useTheme()
|
|
240
241
|
|
|
241
242
|
const goToBack = () => {
|
|
242
243
|
navigation?.canGoBack() && navigation.goBack()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { useEffect, useState } from 'react'
|
|
2
2
|
import Clipboard from '@react-native-clipboard/clipboard';
|
|
3
|
-
import { Messages as MessagesController, useSession, useUtils, useLanguage, ToastType, useToast } from 'ordering-components/native'
|
|
3
|
+
import { Messages as MessagesController, useSession, useUtils, useLanguage, ToastType, useToast, useConfig } from 'ordering-components/native'
|
|
4
4
|
import { useTheme } from 'styled-components/native';
|
|
5
5
|
import { launchImageLibrary } from 'react-native-image-picker'
|
|
6
6
|
import { GiftedChat, Actions, ActionsProps, InputToolbar, Composer, Send, Bubble, MessageImage, InputToolbarProps, ComposerProps } from 'react-native-gifted-chat'
|
|
@@ -39,7 +39,10 @@ const ORDER_STATUS: any = {
|
|
|
39
39
|
20: 'ORDER_CUSTOMER_ALMOST_ARRIVED_BUSINESS',
|
|
40
40
|
21: 'ORDER_CUSTOMER_ARRIVED_BUSINESS',
|
|
41
41
|
22: 'ORDER_LOOKING_FOR_DRIVER',
|
|
42
|
-
23: 'ORDER_DRIVER_ON_WAY'
|
|
42
|
+
23: 'ORDER_DRIVER_ON_WAY',
|
|
43
|
+
24: 'ORDER_DRIVER_WAITING_FOR_ORDER',
|
|
44
|
+
25: 'ORDER_ACCEPTED_BY_DRIVER_COMPANY',
|
|
45
|
+
26: 'ORDER_DRIVER_ARRIVED_CUSTOMER'
|
|
43
46
|
}
|
|
44
47
|
|
|
45
48
|
const filterSpecialStatus = ['prepared_in', 'delivered_in', 'delivery_datetime']
|
|
@@ -67,13 +70,14 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
67
70
|
} = props
|
|
68
71
|
|
|
69
72
|
const [{ user }] = useSession()
|
|
73
|
+
const [{ configs }] = useConfig()
|
|
70
74
|
const [{ parseDate }] = useUtils()
|
|
71
75
|
const [, t] = useLanguage()
|
|
72
76
|
const [, { showToast }] = useToast();
|
|
73
77
|
|
|
74
78
|
const [formattedMessages, setFormattedMessages] = useState<Array<any>>([])
|
|
75
79
|
const [isKeyboardShow, setIsKeyboardShow] = useState(false)
|
|
76
|
-
const previousStatus = [1, 2, 5, 6, 10, 11, 12, 16, 17]
|
|
80
|
+
const previousStatus = [1, 2, 5, 6, 10, 11, 12, 15, 16, 17]
|
|
77
81
|
const chatDisabled = previousStatus.includes(order?.status)
|
|
78
82
|
const { height } = useWindowDimensions();
|
|
79
83
|
const { top, bottom } = useSafeAreaInsets();
|
|
@@ -127,12 +131,12 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
127
131
|
return message.change?.attribute !== 'driver_id'
|
|
128
132
|
?
|
|
129
133
|
`${t('ORDER', 'Order')} ${t(message.change.attribute.toUpperCase(), message.change.attribute.replace('_', ' '))} ${t('CHANGED_FROM', 'Changed from')} ${filterSpecialStatus.includes(message.change.attribute)
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
134
|
+
? `${message.change.old === null ? '0' : message.change.old} ${t('TO', 'to')} ${message.change.new} ${t('MINUTES', 'Minutes')}`
|
|
135
|
+
: `${message.change?.attribute !== 'logistic_status'
|
|
136
|
+
? message.change.old !== null && t(ORDER_STATUS[parseInt(message.change.old, 10)])
|
|
137
|
+
: message.change.old !== null && getLogisticTag(message.change.old)} ${t('TO', 'to')} ${message.change?.attribute !== 'logistic_status'
|
|
138
|
+
? t(ORDER_STATUS[parseInt(message.change.new, 10)])
|
|
139
|
+
: getLogisticTag(message.change.new)}`
|
|
136
140
|
}`
|
|
137
141
|
: message.change.new
|
|
138
142
|
?
|
|
@@ -142,23 +146,24 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
142
146
|
}
|
|
143
147
|
|
|
144
148
|
useEffect(() => {
|
|
145
|
-
|
|
149
|
+
const newMessages: Array<any> = []
|
|
146
150
|
const _console = `${t('ORDER_PLACED_FOR', 'Order placed for')} ${parseDate(order?.created_at)} ${t('VIA', 'Via')} ${order?.app_id ? t(order?.app_id.toUpperCase(), order?.app_id) : t('OTHER', 'Other')}`
|
|
147
151
|
const firstMessage = {
|
|
148
152
|
_id: 0,
|
|
153
|
+
type: 0,
|
|
149
154
|
text: _console,
|
|
150
155
|
createdAt: parseDate(order?.created_at, { outputFormat: 'YYYY-MM-DD HH:mm:ss' }),
|
|
151
156
|
system: true
|
|
152
157
|
}
|
|
153
|
-
const newMessage: any = [];
|
|
154
158
|
messages.messages.map((message: any) => {
|
|
155
159
|
if (message.change?.attribute === 'driver_group_id') return
|
|
156
160
|
if (business && message.type !== 0 && (messagesToShow?.messages?.length || message?.can_see?.includes('2'))) {
|
|
157
|
-
|
|
161
|
+
newMessages.push({
|
|
158
162
|
_id: message?.id,
|
|
159
163
|
text: message.type === 1 ? messageConsole(message) : message.comment,
|
|
160
164
|
createdAt: message.type !== 0 && parseDate(message?.created_at, { outputFormat: 'YYYY-MM-DD HH:mm:ss' }),
|
|
161
165
|
image: message.source,
|
|
166
|
+
type: message.type,
|
|
162
167
|
system: message.type === 1,
|
|
163
168
|
user: {
|
|
164
169
|
_id: message.author && message.author.id,
|
|
@@ -169,11 +174,12 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
169
174
|
}
|
|
170
175
|
|
|
171
176
|
if (driver && message.type !== 0 && (messagesToShow?.messages?.length || message?.can_see?.includes('4'))) {
|
|
172
|
-
|
|
177
|
+
newMessages.push({
|
|
173
178
|
_id: message?.id,
|
|
174
179
|
text: message.type === 1 ? messageConsole(message) : message.comment,
|
|
175
180
|
createdAt: message.type !== 0 && parseDate(message?.created_at, { outputFormat: 'YYYY-MM-DD HH:mm:ss' }),
|
|
176
181
|
image: message.source,
|
|
182
|
+
type: message.type,
|
|
177
183
|
system: message.type === 1,
|
|
178
184
|
user: {
|
|
179
185
|
_id: message.author && message.author.id,
|
|
@@ -184,10 +190,15 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
184
190
|
}
|
|
185
191
|
|
|
186
192
|
if (message.type === 0) {
|
|
187
|
-
|
|
188
|
-
|
|
193
|
+
newMessages.push(firstMessage);
|
|
194
|
+
}
|
|
189
195
|
})
|
|
190
|
-
|
|
196
|
+
let _arrayMessages = [...newMessages.reverse()]
|
|
197
|
+
|
|
198
|
+
if (configs?.order_logbook_enabled?.value === '0') {
|
|
199
|
+
_arrayMessages = _arrayMessages.filter(msg => msg.type !== 1 && msg.type !== 0)
|
|
200
|
+
}
|
|
201
|
+
setFormattedMessages(_arrayMessages);
|
|
191
202
|
}, [messages.messages.length, business, driver])
|
|
192
203
|
|
|
193
204
|
useEffect(() => {
|
|
@@ -461,7 +472,7 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
461
472
|
active={business}
|
|
462
473
|
>
|
|
463
474
|
<OIcon
|
|
464
|
-
url={order?.business?.logo
|
|
475
|
+
url={order?.business?.logo}
|
|
465
476
|
width={32}
|
|
466
477
|
height={32}
|
|
467
478
|
style={{ borderRadius: 32 }}
|
|
@@ -503,6 +514,7 @@ const MessagesUI = (props: MessagesParams) => {
|
|
|
503
514
|
scrollToBottom
|
|
504
515
|
renderAvatarOnTop
|
|
505
516
|
renderUsernameOnMessage
|
|
517
|
+
renderAvatar={() => null}
|
|
506
518
|
renderInputToolbar={renderInputToolbar}
|
|
507
519
|
renderComposer={renderComposer}
|
|
508
520
|
renderSend={renderSend}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { Pressable } from 'react-native'
|
|
3
|
+
import {
|
|
4
|
+
TimeItem,
|
|
5
|
+
} from './styles'
|
|
6
|
+
import { OIcon, OText } from '../shared'
|
|
7
|
+
import { useTheme } from 'styled-components/native'
|
|
8
|
+
|
|
9
|
+
const timeListItemPropsAreEqual = (prevProps: any, nextProps: any) => {
|
|
10
|
+
return JSON.stringify(prevProps.time) === JSON.stringify(nextProps.time) &&
|
|
11
|
+
JSON.stringify(prevProps.selectedTime) === JSON.stringify(nextProps.selectedTime) &&
|
|
12
|
+
JSON.stringify(prevProps.cateringPreorder) === JSON.stringify(nextProps.cateringPreorder)
|
|
13
|
+
}
|
|
14
|
+
export const TimeListItem = React.memo((props : any) => {
|
|
15
|
+
const {
|
|
16
|
+
time,
|
|
17
|
+
selectedTime,
|
|
18
|
+
handleChangeTimeSelected,
|
|
19
|
+
cateringPreorder
|
|
20
|
+
} = props
|
|
21
|
+
const theme = useTheme()
|
|
22
|
+
|
|
23
|
+
return (
|
|
24
|
+
<Pressable onPress={() => handleChangeTimeSelected(time.value)}>
|
|
25
|
+
<TimeItem
|
|
26
|
+
active={selectedTime === time.value}
|
|
27
|
+
cateringPreorder={cateringPreorder}
|
|
28
|
+
>
|
|
29
|
+
{cateringPreorder && (
|
|
30
|
+
<>
|
|
31
|
+
{selectedTime === time.value ? (
|
|
32
|
+
<OIcon
|
|
33
|
+
src={theme.images.general.option_checked}
|
|
34
|
+
width={18}
|
|
35
|
+
style={{ marginEnd: 24, bottom: 2 }}
|
|
36
|
+
/>
|
|
37
|
+
) : (
|
|
38
|
+
<OIcon
|
|
39
|
+
src={theme.images.general.option_normal}
|
|
40
|
+
width={18}
|
|
41
|
+
style={{ marginEnd: 24, bottom: 2 }}
|
|
42
|
+
/>
|
|
43
|
+
)}
|
|
44
|
+
</>
|
|
45
|
+
)}
|
|
46
|
+
<OText
|
|
47
|
+
size={cateringPreorder ? 18 : 16}
|
|
48
|
+
color={selectedTime === time.value ? theme.colors.primary : theme.colors.textNormal}
|
|
49
|
+
style={{
|
|
50
|
+
lineHeight: 24
|
|
51
|
+
}}
|
|
52
|
+
>{time.text} {cateringPreorder && `- ${time.endText}`}</OText>
|
|
53
|
+
</TimeItem>
|
|
54
|
+
</Pressable>
|
|
55
|
+
)
|
|
56
|
+
}, timeListItemPropsAreEqual)
|
|
@@ -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,7 +332,28 @@ const MomentOptionUI = (props: MomentOptionParams) => {
|
|
|
321
332
|
}
|
|
322
333
|
}))
|
|
323
334
|
}
|
|
324
|
-
}, [dateSelected,
|
|
335
|
+
}, [dateSelected, hoursList?.length, JSON.stringify(datesWhitelist), JSON.stringify(business)])
|
|
336
|
+
|
|
337
|
+
useEffect(() => {
|
|
338
|
+
setLocalMoment(moment, t)
|
|
339
|
+
}, [])
|
|
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])
|
|
325
357
|
|
|
326
358
|
return (
|
|
327
359
|
<>
|
|
@@ -395,26 +427,20 @@ const MomentOptionUI = (props: MomentOptionParams) => {
|
|
|
395
427
|
{selectDate && datesWhitelist[0]?.start !== null && (
|
|
396
428
|
<CalendarStrip
|
|
397
429
|
scrollable
|
|
398
|
-
style={styles.calendar}
|
|
399
|
-
calendarHeaderContainerStyle={styles.calendarHeaderContainer}
|
|
400
|
-
calendarHeaderStyle={styles.calendarHeader}
|
|
401
|
-
dateNumberStyle={styles.dateNumber}
|
|
402
|
-
dateNameStyle={styles.dateName}
|
|
403
|
-
iconContainer={{ flex: 0.1 }}
|
|
404
|
-
highlightDateNameStyle={styles.highlightDateName}
|
|
405
|
-
highlightDateNumberStyle={styles.highlightDateNumber}
|
|
406
|
-
dayContainerStyle={{ height: '100%' }}
|
|
407
|
-
highlightDateContainerStyle={{ height: '100%' }}
|
|
408
430
|
calendarHeaderFormat='MMMM, YYYY'
|
|
409
431
|
iconStyle={{ borderWidth: 1 }}
|
|
410
432
|
selectedDate={dateSelected}
|
|
411
433
|
datesWhitelist={datesWhitelist}
|
|
434
|
+
highlightDateNumberStyle={styles.highlightDateNumber}
|
|
435
|
+
highlightDateNameStyle={styles.highlightDateName}
|
|
412
436
|
minDate={moment()}
|
|
413
437
|
maxDate={cateringPreorder ? moment().add(preorderMaximumDays, 'days') : undefined}
|
|
414
438
|
disabledDateNameStyle={styles.disabledDateName}
|
|
415
439
|
disabledDateNumberStyle={styles.disabledDateNumber}
|
|
416
440
|
disabledDateOpacity={0.6}
|
|
417
|
-
|
|
441
|
+
dateNumberStyle={styles.dateNumber}
|
|
442
|
+
dateNameStyle={styles.dateName}
|
|
443
|
+
onDateSelected={(date: any) => onSelectDate(date)}
|
|
418
444
|
leftSelector={<LeftSelector />}
|
|
419
445
|
rightSelector={<RightSelector />}
|
|
420
446
|
/>
|
|
@@ -422,44 +448,34 @@ const MomentOptionUI = (props: MomentOptionParams) => {
|
|
|
422
448
|
</View>
|
|
423
449
|
)}
|
|
424
450
|
<TimeListWrapper nestedScrollEnabled={true} cateringPreorder={cateringPreorder}>
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
<
|
|
429
|
-
|
|
451
|
+
{timeList?.length > 0 ? (
|
|
452
|
+
<TimeContentWrapper>
|
|
453
|
+
{timeList.map((time: any, i: number) => (
|
|
454
|
+
<TimeListItem
|
|
455
|
+
key={i}
|
|
456
|
+
time={time}
|
|
457
|
+
selectedTime={selectedTime}
|
|
458
|
+
handleChangeTimeSelected={handleChangeTimeSelected}
|
|
430
459
|
cateringPreorder={cateringPreorder}
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
size={cateringPreorder ? 18 : 16}
|
|
451
|
-
color={selectedTime === time.value ? theme.colors.primary : theme.colors.textNormal}
|
|
452
|
-
style={{
|
|
453
|
-
lineHeight: 24
|
|
454
|
-
}}
|
|
455
|
-
>{time.text} {cateringPreorder && `- ${time.endText}`}</OText>
|
|
456
|
-
</TimeItem>
|
|
457
|
-
</Pressable>
|
|
458
|
-
))}
|
|
459
|
-
{timeList.length % 3 === 2 && (
|
|
460
|
-
<TimeItem style={{ backgroundColor: 'transparent' }} />
|
|
461
|
-
)}
|
|
462
|
-
</TimeContentWrapper>
|
|
460
|
+
/>
|
|
461
|
+
))}
|
|
462
|
+
{timeList.length % 3 === 2 && (
|
|
463
|
+
<TimeItem style={{ backgroundColor: 'transparent' }} />
|
|
464
|
+
)}
|
|
465
|
+
</TimeContentWrapper>
|
|
466
|
+
) : (
|
|
467
|
+
<OText
|
|
468
|
+
size={16}
|
|
469
|
+
style={{
|
|
470
|
+
fontWeight: '600',
|
|
471
|
+
lineHeight: 24,
|
|
472
|
+
marginBottom: 12,
|
|
473
|
+
textAlign: 'center'
|
|
474
|
+
}}
|
|
475
|
+
>
|
|
476
|
+
{t('ERROR_ADD_PRODUCT_BUSINESS_CLOSED', 'The business is closed at the moment')}
|
|
477
|
+
</OText>
|
|
478
|
+
)}
|
|
463
479
|
</TimeListWrapper>
|
|
464
480
|
</OrderTimeWrapper>
|
|
465
481
|
)}
|
|
@@ -468,7 +484,14 @@ const MomentOptionUI = (props: MomentOptionParams) => {
|
|
|
468
484
|
</Container>
|
|
469
485
|
{!isCart && !cateringPreorder && (
|
|
470
486
|
<View style={{ position: 'absolute', bottom: bottom, paddingBottom: 20, paddingHorizontal: 20, backgroundColor: 'white', width: '100%' }}>
|
|
471
|
-
<OButton
|
|
487
|
+
<OButton
|
|
488
|
+
onClick={() => handleChangeMoment()}
|
|
489
|
+
isDisabled={!selectedTime}
|
|
490
|
+
text={t('CONTINUE', 'Continue')}
|
|
491
|
+
style={{ borderRadius: 7.6, height: 44, shadowOpacity: 0 }}
|
|
492
|
+
textStyle={{ fontSize: 14 }}
|
|
493
|
+
showNextIcon
|
|
494
|
+
/>
|
|
472
495
|
</View>
|
|
473
496
|
)}
|
|
474
497
|
</>
|
|
@@ -51,7 +51,7 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
|
|
|
51
51
|
const { confirmApplePayPayment } = useApplePay()
|
|
52
52
|
|
|
53
53
|
const [addCardOpen, setAddCardOpen] = useState({ stripe: false, stripeConnect: false });
|
|
54
|
-
|
|
54
|
+
const [newCardAdded, setNewCardAdded] = useState(null)
|
|
55
55
|
const isWalletCashEnabled = configs?.wallet_cash_enabled?.value === '1'
|
|
56
56
|
const isWalletPointsEnabled = configs?.wallet_credit_point_enabled?.value === '1'
|
|
57
57
|
|
|
@@ -223,6 +223,8 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
|
|
|
223
223
|
handlePaymethodDataChange={handlePaymethodDataChange}
|
|
224
224
|
clientSecret={props.clientSecret}
|
|
225
225
|
onPaymentChange={handlePaymethodDataChange}
|
|
226
|
+
newCardAdded={newCardAdded}
|
|
227
|
+
addNewCardAsDefault
|
|
226
228
|
/>
|
|
227
229
|
</View>
|
|
228
230
|
)}
|
|
@@ -233,6 +235,7 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
|
|
|
233
235
|
toSave
|
|
234
236
|
businessId={businessIds[0]}
|
|
235
237
|
businessIds={businessIds}
|
|
238
|
+
businessNames={openCarts?.map?.((cart: any) => cart?.business?.name)}
|
|
236
239
|
publicKey={paymethodSelected?.data?.publishable}
|
|
237
240
|
requirements={props.clientSecret}
|
|
238
241
|
handleSource={handlePaymethodDataChange}
|
|
@@ -306,7 +309,7 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
|
|
|
306
309
|
</>
|
|
307
310
|
)}
|
|
308
311
|
|
|
309
|
-
|
|
312
|
+
<OModal
|
|
310
313
|
entireModal
|
|
311
314
|
title={t('ADD_CREDIT_OR_DEBIT_CARD', 'Add credit or debit card')}
|
|
312
315
|
open={addCardOpen.stripe}
|
|
@@ -326,10 +329,11 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
|
|
|
326
329
|
publicKey={paymethodSelected?.data?.publishable}
|
|
327
330
|
requirements={props.clientSecret}
|
|
328
331
|
onSelectCard={handlePaymethodDataChange}
|
|
332
|
+
setNewCardAdded={setNewCardAdded}
|
|
329
333
|
onCancel={() => setAddCardOpen({ ...addCardOpen, stripe: false })}
|
|
330
334
|
/>
|
|
331
335
|
</KeyboardAvoidingView>
|
|
332
|
-
</OModal>
|
|
336
|
+
</OModal>
|
|
333
337
|
</PMContainer>
|
|
334
338
|
)
|
|
335
339
|
}
|