ordering-ui-react-native 0.15.56 → 0.15.58-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/AddressForm/index.tsx +18 -2
- package/src/components/BusinessController/index.tsx +16 -8
- package/src/components/BusinessTypeFilter/index.tsx +3 -1
- package/src/components/BusinessesListing/index.tsx +1 -1
- package/src/components/Checkout/index.tsx +23 -2
- package/src/components/DriverTips/index.tsx +11 -6
- package/src/components/LanguageSelector/index.tsx +7 -2
- package/src/components/LoginForm/index.tsx +120 -30
- package/src/components/LoginForm/styles.tsx +6 -0
- package/src/components/OrderDetails/index.tsx +7 -21
- package/src/components/PaymentOptions/index.tsx +67 -50
- package/src/components/PaymentOptionsWebView/index.tsx +123 -124
- package/src/components/SignupForm/index.tsx +145 -61
- package/src/components/SingleProductCard/index.tsx +16 -4
- package/src/components/StripeMethodForm/index.tsx +1 -2
- package/src/components/UpsellingProducts/index.tsx +1 -1
- package/src/components/UserProfileForm/index.tsx +63 -6
- package/src/components/UserProfileForm/styles.tsx +8 -0
- package/src/components/VerifyPhone/styles.tsx +1 -2
- package/src/components/shared/OModal.tsx +1 -1
- package/src/hooks/useCountdownTimer.tsx +26 -0
- package/src/navigators/CheckoutNavigator.tsx +6 -0
- package/src/navigators/HomeNavigator.tsx +12 -0
- package/src/pages/BusinessesListing.tsx +1 -1
- package/src/pages/MultiCheckout.tsx +31 -0
- package/src/pages/MultiOrdersDetails.tsx +27 -0
- package/src/pages/Sessions.tsx +22 -0
- package/src/theme.json +0 -1
- package/src/types/index.tsx +18 -11
- package/src/utils/index.tsx +68 -1
- package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +103 -15
- package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -0
- package/themes/business/src/components/Chat/index.tsx +42 -90
- package/themes/business/src/components/DriverMap/index.tsx +6 -5
- package/themes/business/src/components/LoginForm/index.tsx +89 -2
- package/themes/business/src/components/LoginForm/styles.tsx +6 -0
- package/themes/business/src/components/LogoutButton/index.tsx +1 -1
- package/themes/business/src/components/NewOrderNotification/index.tsx +79 -105
- package/themes/business/src/components/OrderDetails/Business.tsx +2 -2
- package/themes/business/src/components/OrderDetails/Delivery.tsx +28 -11
- package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +41 -7
- package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +6 -0
- package/themes/business/src/components/OrdersListManager/index.tsx +1 -1
- package/themes/business/src/components/OrdersOption/index.tsx +5 -2
- package/themes/business/src/components/PreviousOrders/index.tsx +2 -2
- package/themes/business/src/components/ProductItemAccordion/index.tsx +2 -2
- package/themes/business/src/components/UserFormDetails/index.tsx +5 -2
- package/themes/business/src/components/UserProfileForm/index.tsx +2 -0
- package/themes/business/src/components/shared/OModal.tsx +1 -1
- package/themes/business/src/types/index.tsx +6 -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/BusinessMenu/index.tsx +39 -28
- package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -3
- package/themes/kiosk/src/components/Cart/index.tsx +11 -12
- package/themes/kiosk/src/components/CartBottomSheet/index.tsx +9 -2
- package/themes/kiosk/src/components/CartContent/index.tsx +0 -11
- package/themes/kiosk/src/components/CartItem/index.tsx +4 -3
- package/themes/kiosk/src/components/CategoriesMenu/index.tsx +107 -62
- package/themes/kiosk/src/components/Checkout/index.tsx +40 -22
- package/themes/kiosk/src/components/CustomerName/index.tsx +0 -6
- package/themes/kiosk/src/components/DrawerView/index.tsx +1 -0
- package/themes/kiosk/src/components/DrawerView/styles.tsx +2 -2
- package/themes/kiosk/src/components/NavBar/index.tsx +29 -20
- package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
- package/themes/kiosk/src/components/OrderDetails/index.tsx +32 -27
- package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +9 -11
- package/themes/kiosk/src/components/PaymentOptions/index.tsx +56 -54
- package/themes/kiosk/src/components/ProductForm/index.tsx +7 -8
- package/themes/kiosk/src/components/ProductItemAccordion/index.tsx +2 -2
- package/themes/kiosk/src/components/ProductOption/index.tsx +1 -1
- package/themes/kiosk/src/components/ProductOptionSubOption/index.tsx +3 -1
- package/themes/kiosk/src/components/UpsellingProducts/index.tsx +16 -5
- package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
- package/themes/kiosk/src/types/index.d.ts +1 -0
- package/themes/original/index.tsx +169 -4
- package/themes/original/src/components/ActiveOrders/index.tsx +15 -132
- package/themes/original/src/components/ActiveOrders/styles.tsx +0 -54
- package/themes/original/src/components/AddressForm/index.tsx +7 -6
- package/themes/original/src/components/AddressList/index.tsx +30 -18
- package/themes/original/src/components/AppleLogin/index.tsx +9 -13
- package/themes/original/src/components/BusinessBasicInformation/index.tsx +136 -45
- package/themes/original/src/components/BusinessBasicInformation/styles.tsx +4 -0
- package/themes/original/src/components/BusinessController/index.tsx +48 -11
- package/themes/original/src/components/BusinessController/styles.tsx +27 -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/BusinessItemAccordion/index.tsx +8 -5
- package/themes/original/src/components/BusinessItemAccordion/styles.tsx +3 -1
- package/themes/original/src/components/BusinessListingSearch/index.tsx +196 -58
- package/themes/original/src/components/BusinessListingSearch/styles.tsx +22 -2
- package/themes/original/src/components/BusinessPreorder/index.tsx +1 -1
- package/themes/original/src/components/BusinessProductsCategories/index.tsx +2 -2
- package/themes/original/src/components/BusinessProductsList/CategoryDescription/index.tsx +44 -0
- package/themes/original/src/components/BusinessProductsList/index.tsx +119 -35
- package/themes/original/src/components/BusinessProductsList/styles.tsx +12 -4
- package/themes/original/src/components/BusinessProductsListing/index.tsx +109 -21
- package/themes/original/src/components/BusinessProductsListing/styles.tsx +22 -0
- package/themes/original/src/components/BusinessReviews/index.tsx +6 -1
- package/themes/original/src/components/BusinessTypeFilter/index.tsx +1 -2
- package/themes/original/src/components/BusinessesListing/index.tsx +127 -66
- package/themes/original/src/components/BusinessesListing/styles.tsx +11 -3
- package/themes/original/src/components/Cart/index.tsx +60 -41
- package/themes/original/src/components/Checkout/index.tsx +48 -32
- package/themes/original/src/components/DriverTips/index.tsx +17 -12
- package/themes/original/src/components/Favorite/index.tsx +92 -0
- package/themes/original/src/components/Favorite/styles.tsx +22 -0
- package/themes/original/src/components/FavoriteList/index.tsx +298 -0
- package/themes/original/src/components/FavoriteList/styles.tsx +5 -0
- package/themes/original/src/components/ForgotPasswordForm/index.tsx +84 -4
- package/themes/original/src/components/GPSButton/index.tsx +15 -8
- package/themes/original/src/components/GoogleMap/index.tsx +11 -11
- package/themes/original/src/components/Help/index.tsx +21 -4
- package/themes/original/src/components/HighestRatedBusinesses/index.tsx +18 -1
- package/themes/original/src/components/Home/index.tsx +1 -1
- package/themes/original/src/components/LastOrders/index.tsx +12 -1
- package/themes/original/src/components/LoginForm/Otp/index.tsx +91 -0
- package/themes/original/src/components/LoginForm/Otp/styles.tsx +7 -0
- package/themes/original/src/components/LoginForm/index.tsx +332 -164
- package/themes/original/src/components/LoginForm/styles.tsx +1 -3
- package/themes/original/src/components/MessageListing/index.tsx +10 -1
- package/themes/original/src/components/Messages/index.tsx +1 -1
- 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/MultiCartsPaymethodsAndWallets/index.tsx +243 -0
- package/themes/original/src/components/MultiCartsPaymethodsAndWallets/styles.tsx +46 -0
- package/themes/original/src/components/MultiCheckout/index.tsx +298 -0
- package/themes/original/src/components/MultiCheckout/styles.tsx +59 -0
- package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +372 -0
- package/themes/original/src/components/MultiOrdersDetails/index.tsx +258 -0
- package/themes/original/src/components/MultiOrdersDetails/styles.tsx +50 -0
- package/themes/original/src/components/MyOrders/index.tsx +120 -32
- package/themes/original/src/components/MyOrders/styles.tsx +8 -1
- package/themes/original/src/components/OrderDetails/OrderHistory.tsx +167 -0
- package/themes/original/src/components/OrderDetails/index.tsx +135 -49
- package/themes/original/src/components/OrderDetails/styles.tsx +1 -2
- package/themes/original/src/components/OrderSummary/index.tsx +2 -2
- package/themes/original/src/components/OrderTypeSelector/index.tsx +4 -2
- package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +153 -0
- package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/styles.tsx +6 -0
- package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +53 -0
- package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/styles.tsx +6 -0
- package/themes/original/src/components/OrdersOption/index.tsx +130 -38
- package/themes/original/src/components/OrdersOption/styles.tsx +4 -1
- package/themes/original/src/components/PaymentOptionCash/index.tsx +2 -2
- package/themes/original/src/components/PaymentOptionWallet/index.tsx +17 -23
- package/themes/original/src/components/PaymentOptionWallet/styles.tsx +1 -1
- package/themes/original/src/components/PaymentOptions/index.tsx +57 -36
- package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
- package/themes/original/src/components/PreviousOrders/index.tsx +18 -147
- package/themes/original/src/components/ProductForm/index.tsx +70 -62
- package/themes/original/src/components/ProductForm/styles.tsx +0 -1
- package/themes/original/src/components/ProductItemAccordion/index.tsx +2 -2
- package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -12
- package/themes/original/src/components/Promotions/index.tsx +151 -133
- package/themes/original/src/components/Promotions/styles.tsx +3 -23
- package/themes/original/src/components/SearchBar/index.tsx +10 -4
- 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 +269 -130
- package/themes/original/src/components/SingleOrderCard/index.tsx +282 -0
- package/themes/original/src/components/SingleOrderCard/styles.tsx +54 -0
- package/themes/original/src/components/SingleProductCard/index.tsx +59 -17
- package/themes/original/src/components/StripeElementsForm/index.tsx +16 -8
- package/themes/original/src/components/StripeElementsForm/naked.tsx +2 -2
- package/themes/original/src/components/UpsellingProducts/index.tsx +86 -74
- package/themes/original/src/components/UserDetails/index.tsx +5 -96
- package/themes/original/src/components/UserFormDetails/index.tsx +34 -24
- package/themes/original/src/components/UserProfile/index.tsx +53 -6
- package/themes/original/src/components/UserProfileForm/index.tsx +20 -18
- package/themes/original/src/components/UserVerification/index.tsx +178 -192
- 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 +76 -9
- package/themes/original/src/components/Wallets/styles.tsx +21 -0
- package/themes/original/src/components/shared/OModal.tsx +4 -2
- package/themes/original/src/config/constants.tsx +6 -6
- package/themes/original/src/types/index.tsx +192 -33
- package/themes/original/src/utils/index.tsx +85 -2
- package/themes/single-business/src/components/AddressList/index.tsx +1 -1
- package/themes/single-business/src/components/OrderTypeSelector/index.tsx +1 -1
- package/themes/single-business/src/components/UserProfile/index.tsx +1 -1
- package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ordering-ui-react-native",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.58-release",
|
|
4
4
|
"description": "Reusable components made in react native",
|
|
5
5
|
"main": "src/index.tsx",
|
|
6
6
|
"author": "ordering.inc",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"@types/styled-components": "^5.1.3",
|
|
58
58
|
"axios": "^0.21.0",
|
|
59
59
|
"moment": "^2.29.1",
|
|
60
|
-
"ordering-components": "github:Ordering-Inc/ordering-components#
|
|
60
|
+
"ordering-components": "github:Ordering-Inc/ordering-components#release",
|
|
61
61
|
"patch-package": "^6.4.7",
|
|
62
62
|
"postinstall-postinstall": "^2.1.0",
|
|
63
63
|
"prop-types": "^15.7.2",
|
|
@@ -109,6 +109,7 @@
|
|
|
109
109
|
"react-native-sound": "^0.11.1",
|
|
110
110
|
"react-native-swipe-gestures": "^1.0.5",
|
|
111
111
|
"react-native-swiper": "^1.6.0",
|
|
112
|
+
"react-native-tracking-transparency": "^0.1.1",
|
|
112
113
|
"react-native-uuid": "^2.0.1",
|
|
113
114
|
"react-native-vector-icons": "^7.1.0",
|
|
114
115
|
"react-native-webview": "^11.6.4",
|
|
@@ -123,7 +124,8 @@
|
|
|
123
124
|
"@babel/core": "^7.11.6",
|
|
124
125
|
"@babel/runtime": "^7.11.2",
|
|
125
126
|
"@react-native-community/eslint-config": "^2.0.0",
|
|
126
|
-
"@types/react": "^
|
|
127
|
+
"@types/react": "^18.0.15",
|
|
128
|
+
"@types/react-dom": "^18.0.6",
|
|
127
129
|
"@types/react-native": "^0.63.25",
|
|
128
130
|
"babel-jest": "^26.3.0",
|
|
129
131
|
"eslint": "^7.10.0",
|
package/src/DeliveryApp.tsx
CHANGED
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import * as React from 'react';
|
|
10
|
-
import { LogBox } from 'react-native';
|
|
10
|
+
import { LogBox, Platform } from 'react-native';
|
|
11
|
+
import * as Sentry from "@sentry/react-native";
|
|
11
12
|
import { OrderingProvider } from 'ordering-components/native';
|
|
12
13
|
import RNBootSplash from "react-native-bootsplash";
|
|
13
14
|
|
|
@@ -22,6 +23,47 @@ import theme from './theme.json';
|
|
|
22
23
|
import AppContainer from './AppContainer';
|
|
23
24
|
import { FacebookPixel } from './components/FacebookPixel';
|
|
24
25
|
|
|
26
|
+
Sentry.init({
|
|
27
|
+
environment: Platform.OS === 'ios' ? 'ios' : 'android',
|
|
28
|
+
dsn: 'https://e5e1115dc93b49109f4ab65f2098bef9@o460529.ingest.sentry.io/5722123',
|
|
29
|
+
release: 'ordering-ui-native@' + process.env.npm_package_version,
|
|
30
|
+
ignoreErrors: [
|
|
31
|
+
'is not defined',
|
|
32
|
+
'is not a function',
|
|
33
|
+
'can\'t find variable',
|
|
34
|
+
'objects are not valid',
|
|
35
|
+
'element type is invalid',
|
|
36
|
+
'requiring module',
|
|
37
|
+
'has not been registered',
|
|
38
|
+
'failed to connect to debugger!',
|
|
39
|
+
'rendered more hooks than',
|
|
40
|
+
'rendered fewer hooks than',
|
|
41
|
+
'should have a queue',
|
|
42
|
+
'the OS most likely terminated',
|
|
43
|
+
'Connection timed out',
|
|
44
|
+
'java.io.EOFException',
|
|
45
|
+
'Abort',
|
|
46
|
+
'Segfault',
|
|
47
|
+
'Failed to allocate a',
|
|
48
|
+
'Application Not Responding',
|
|
49
|
+
'connection no longer valid',
|
|
50
|
+
'IllegalInstruction',
|
|
51
|
+
'React.Children.only expected to receive a single React element child.',
|
|
52
|
+
'unrecognized selector sent to instance'
|
|
53
|
+
],
|
|
54
|
+
tracesSampleRate: 0.2,
|
|
55
|
+
// Release health
|
|
56
|
+
enableAutoSessionTracking: true,
|
|
57
|
+
// Sessions close after app is 10 seconds in the background.
|
|
58
|
+
sessionTrackingIntervalMillis: 10000,
|
|
59
|
+
|
|
60
|
+
integrations: [
|
|
61
|
+
new Sentry.ReactNativeTracing({
|
|
62
|
+
routingInstrumentation: reactNavigationV5Instrumentation,
|
|
63
|
+
})
|
|
64
|
+
]
|
|
65
|
+
});
|
|
66
|
+
|
|
25
67
|
LogBox.ignoreLogs([
|
|
26
68
|
'Sending \`onAnimatedValueUpdate` with no listeners registered.',
|
|
27
69
|
'Non-serializable values were found in the navigation state.',
|
|
@@ -210,9 +210,25 @@ const AddressFormUI = (props: AddressFormParams) => {
|
|
|
210
210
|
}
|
|
211
211
|
if ( addressType === 'postal_code') {
|
|
212
212
|
postalCode = component.short_name
|
|
213
|
+
if (isObjet) {
|
|
214
|
+
setValue('zipcode', postalCode)
|
|
215
|
+
handleChangeInput({ target: { name: 'zipcode', value: postalCode } })
|
|
216
|
+
}
|
|
213
217
|
}
|
|
214
218
|
}
|
|
215
219
|
isObjet ? address = addressValue.join(', ') : address
|
|
220
|
+
|
|
221
|
+
if (isObjet) {
|
|
222
|
+
setValue('address', address)
|
|
223
|
+
googleInput?.current?.setAddressText(address)
|
|
224
|
+
setLoadingLocation(false)
|
|
225
|
+
updateChanges({
|
|
226
|
+
address: address,
|
|
227
|
+
location: json.results[0].geometry.location
|
|
228
|
+
})
|
|
229
|
+
return
|
|
230
|
+
}
|
|
231
|
+
|
|
216
232
|
data.address = {
|
|
217
233
|
address,
|
|
218
234
|
location: json.results[0].geometry.location,
|
|
@@ -597,7 +613,7 @@ const AddressFormUI = (props: AddressFormParams) => {
|
|
|
597
613
|
name='zipcode'
|
|
598
614
|
rules={{ required: isRequiredField && isRequiredField('zipcode') ? t(`VALIDATION_ERROR_ZIP_CODE_REQUIRED`, `The field Zip Code is required`) : null }}
|
|
599
615
|
defaultValue={address?.zipcode || formState.changes?.zipcode || addressState.address.zipcode || ''}
|
|
600
|
-
render={() => (
|
|
616
|
+
render={({ value }) => (
|
|
601
617
|
<OInput
|
|
602
618
|
name='zipcode'
|
|
603
619
|
placeholder={t('ZIP_CODE', 'Zip code')}
|
|
@@ -605,7 +621,7 @@ const AddressFormUI = (props: AddressFormParams) => {
|
|
|
605
621
|
handleChangeInput(text)
|
|
606
622
|
setValue('zipcode', text)
|
|
607
623
|
}}
|
|
608
|
-
value={address?.zipcode || formState.changes?.zipcode || addressState.address.zipcode || ''}
|
|
624
|
+
value={value || address?.zipcode || formState.changes?.zipcode || addressState.address.zipcode || ''}
|
|
609
625
|
style={styles.inputsStyle}
|
|
610
626
|
forwardRef={zipCodeRef}
|
|
611
627
|
returnKeyType='next'
|
|
@@ -32,6 +32,7 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
|
|
|
32
32
|
business,
|
|
33
33
|
handleClick,
|
|
34
34
|
isBusinessOpen,
|
|
35
|
+
getBusinessOffer,
|
|
35
36
|
businessWillCloseSoonMinutes,
|
|
36
37
|
isBusinessClose
|
|
37
38
|
} = props;
|
|
@@ -145,11 +146,18 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
|
|
|
145
146
|
/>
|
|
146
147
|
</BusinessLogo>
|
|
147
148
|
<BusinessState>
|
|
148
|
-
{!isBusinessOpen && (
|
|
149
|
+
{(!isBusinessOpen || !!getBusinessOffer(business?.offers)) && (
|
|
149
150
|
<View style={styles.businessStateView}>
|
|
150
|
-
|
|
151
|
-
{
|
|
152
|
-
|
|
151
|
+
{getBusinessOffer(business?.offers) && (
|
|
152
|
+
<OText color={theme.colors.white} size={18} style={styles.businessStateText}>
|
|
153
|
+
{getBusinessOffer(business?.offers) || parsePrice(0)}
|
|
154
|
+
</OText>
|
|
155
|
+
)}
|
|
156
|
+
{!isBusinessOpen && (
|
|
157
|
+
<OText color={theme.colors.white} size={18} style={styles.businessStateText}>
|
|
158
|
+
{t('PREORDER', 'PREORDER')}
|
|
159
|
+
</OText>
|
|
160
|
+
)}
|
|
153
161
|
</View>
|
|
154
162
|
)}
|
|
155
163
|
</BusinessState>
|
|
@@ -158,10 +166,10 @@ export const BusinessControllerUI = (props: BusinessControllerParams) => {
|
|
|
158
166
|
<BusinessInfo>
|
|
159
167
|
<View style={{ width: '70%', alignItems: 'flex-start' }}>
|
|
160
168
|
<OText
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
169
|
+
size={20}
|
|
170
|
+
numberOfLines={1}
|
|
171
|
+
ellipsizeMode='tail'
|
|
172
|
+
>
|
|
165
173
|
{business?.name}
|
|
166
174
|
</OText>
|
|
167
175
|
</View>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useState } from 'react'
|
|
2
|
-
import { StyleSheet, View, ScrollView,
|
|
2
|
+
import { StyleSheet, View, ScrollView, Dimensions, Platform, PlatformIOSStatic, TouchableOpacity } from 'react-native'
|
|
3
3
|
import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder'
|
|
4
4
|
import { BusinessTypeFilter as BusinessTypeFilterController, useLanguage } from 'ordering-components/native'
|
|
5
5
|
|
|
@@ -71,11 +71,13 @@ export const BusinessTypeFilterUI = (props: BusinessTypeFilterParams) => {
|
|
|
71
71
|
<OIcon
|
|
72
72
|
url={item.image}
|
|
73
73
|
style={styles.logo}
|
|
74
|
+
cover
|
|
74
75
|
/>
|
|
75
76
|
) : (
|
|
76
77
|
<OIcon
|
|
77
78
|
src={theme.images.categories.all}
|
|
78
79
|
style={styles.logo}
|
|
80
|
+
cover
|
|
79
81
|
/>
|
|
80
82
|
)}
|
|
81
83
|
<OText
|
|
@@ -191,7 +191,7 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
|
|
|
191
191
|
{isFarAway && (
|
|
192
192
|
<FarAwayMessage style={styles.farAwayMsg}>
|
|
193
193
|
<Ionicons name='md-warning-outline' style={styles.iconStyle} />
|
|
194
|
-
<OText size={12} numberOfLines={1} ellipsizeMode={'tail'} color={theme.colors.textNormal}>{t('YOU_ARE_FAR_FROM_ADDRESS', '
|
|
194
|
+
<OText size={12} numberOfLines={1} ellipsizeMode={'tail'} color={theme.colors.textNormal}>{t('YOU_ARE_FAR_FROM_ADDRESS', 'Your are far from this address')}</OText>
|
|
195
195
|
</FarAwayMessage>
|
|
196
196
|
)}
|
|
197
197
|
</OrderControlContainer>
|
|
@@ -592,6 +592,19 @@ const CheckoutUI = (props: any) => {
|
|
|
592
592
|
{t('WARNING_INVALID_PRODUCTS', 'Some products are invalid, please check them.')}
|
|
593
593
|
</OText>
|
|
594
594
|
)}
|
|
595
|
+
|
|
596
|
+
{options.type === 1 &&
|
|
597
|
+
validationFields?.fields?.checkout?.driver_tip?.enabled &&
|
|
598
|
+
validationFields?.fields?.checkout?.driver_tip?.required &&
|
|
599
|
+
(Number(cart?.driver_tip) <= 0) && (
|
|
600
|
+
<OText
|
|
601
|
+
style={{ textAlign: 'center' }}
|
|
602
|
+
color={theme.colors.error}
|
|
603
|
+
size={14}
|
|
604
|
+
>
|
|
605
|
+
{t('WARNING_INVALID_DRIVER_TIP', 'Driver Tip is required.')}
|
|
606
|
+
</OText>
|
|
607
|
+
)}
|
|
595
608
|
</ChErrors>
|
|
596
609
|
</ChSection>
|
|
597
610
|
)}
|
|
@@ -602,8 +615,16 @@ const CheckoutUI = (props: any) => {
|
|
|
602
615
|
<>
|
|
603
616
|
<FloatingButton
|
|
604
617
|
handleClick={() => handlePlaceOrder()}
|
|
605
|
-
isSecondaryBtn={loading || !cart?.valid || !paymethodSelected || placing || errorCash || cart?.subtotal_to_calculate < cart?.minimum || paymethodSelected?.gateway === 'paypal'
|
|
606
|
-
|
|
618
|
+
isSecondaryBtn={loading || !cart?.valid || !paymethodSelected || placing || errorCash || cart?.subtotal_to_calculate < cart?.minimum || paymethodSelected?.gateway === 'paypal' ||
|
|
619
|
+
(options.type === 1 &&
|
|
620
|
+
validationFields?.fields?.checkout?.driver_tip?.enabled &&
|
|
621
|
+
validationFields?.fields?.checkout?.driver_tip?.required &&
|
|
622
|
+
(Number(cart?.driver_tip) <= 0))}
|
|
623
|
+
disabled={loading || !cart?.valid || !paymethodSelected || placing || errorCash || cart?.subtotal_to_calculate < cart?.minimum || paymethodSelected?.gateway === 'paypal' ||
|
|
624
|
+
(options.type === 1 &&
|
|
625
|
+
validationFields?.fields?.checkout?.driver_tip?.enabled &&
|
|
626
|
+
validationFields?.fields?.checkout?.driver_tip?.required &&
|
|
627
|
+
(Number(cart?.driver_tip) <= 0))}
|
|
607
628
|
btnText={cart?.subtotal_to_calculate >= cart?.minimum
|
|
608
629
|
? (
|
|
609
630
|
placing
|
|
@@ -49,7 +49,7 @@ const DriverTipsUI = (props: any) => {
|
|
|
49
49
|
const [{ configs }] = useConfig();
|
|
50
50
|
const [{loading}] = useOrder()
|
|
51
51
|
|
|
52
|
-
const [value, setvalue] = useState(
|
|
52
|
+
const [value, setvalue] = useState('');
|
|
53
53
|
const [valueOption,setValueOption] = useState(0)
|
|
54
54
|
|
|
55
55
|
const placeholderCurrency = (configs?.currency_position?.value || 'left') === 'left'
|
|
@@ -57,9 +57,12 @@ const DriverTipsUI = (props: any) => {
|
|
|
57
57
|
: `0${configs?.format_number_currency?.value}`
|
|
58
58
|
|
|
59
59
|
const handleChangeDriverTip = (val: any) => {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
const tip = Number(val)
|
|
61
|
+
if ((isNaN(tip) || tip < 0)) {
|
|
62
|
+
setvalue(value)
|
|
63
|
+
return
|
|
64
|
+
}
|
|
65
|
+
setvalue(val)
|
|
63
66
|
}
|
|
64
67
|
|
|
65
68
|
const handleChangeOptionCustom = (val : any) => {
|
|
@@ -110,6 +113,8 @@ const DriverTipsUI = (props: any) => {
|
|
|
110
113
|
<OInput
|
|
111
114
|
placeholder={placeholderCurrency}
|
|
112
115
|
style={style.inputStyle}
|
|
116
|
+
value={value}
|
|
117
|
+
type={'numeric'}
|
|
113
118
|
onChange={handleChangeDriverTip}
|
|
114
119
|
autoCapitalize='none'
|
|
115
120
|
autoCorrect={false}
|
|
@@ -121,10 +126,10 @@ const DriverTipsUI = (props: any) => {
|
|
|
121
126
|
textStyle={{ color: 'white', fontSize: 18, maxWidth: 110, minWidth: 60 }}
|
|
122
127
|
imgRightSrc={null}
|
|
123
128
|
textProps={{numberOfLines: 1}}
|
|
124
|
-
isDisabled={
|
|
129
|
+
isDisabled={parseFloat(value || '0') < 0 || parseFloat(value || '0') === driverTip || value === ''}
|
|
125
130
|
onClick={() => {
|
|
126
131
|
handlerChangeOption(value)
|
|
127
|
-
setvalue(
|
|
132
|
+
setvalue('')
|
|
128
133
|
}}
|
|
129
134
|
/>
|
|
130
135
|
</DTWrapperInput>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useState } from 'react'
|
|
1
|
+
import React, { useEffect, useState } from 'react'
|
|
2
2
|
import { LanguageSelector as LanguageSelectorController, useOrder } from 'ordering-components/native'
|
|
3
3
|
import { useTheme } from 'styled-components/native';
|
|
4
4
|
import { I18nManager, Platform, StyleSheet, View } from 'react-native'
|
|
@@ -87,7 +87,11 @@ const LanguageSelectorUI = (props: LanguageSelectorParams) => {
|
|
|
87
87
|
changeDirection(Platform.OS === 'ios' ? language : langCode)
|
|
88
88
|
handleChangeLanguage(Platform.OS === 'ios' ? language : langCode)
|
|
89
89
|
}
|
|
90
|
-
|
|
90
|
+
|
|
91
|
+
useEffect(() => {
|
|
92
|
+
changeDirection(currentLanguage)
|
|
93
|
+
}, [])
|
|
94
|
+
|
|
91
95
|
return (
|
|
92
96
|
<Container>
|
|
93
97
|
{languagesState?.languages ? (
|
|
@@ -101,6 +105,7 @@ const LanguageSelectorUI = (props: LanguageSelectorParams) => {
|
|
|
101
105
|
disabled={orderState.loading}
|
|
102
106
|
onClose={() => Platform.OS === 'ios' ? handlerChangeLanguage() : {}}
|
|
103
107
|
onDonePress={() => handlerChangeLanguage()}
|
|
108
|
+
fixAndroidTouchableBug={true}
|
|
104
109
|
/>
|
|
105
110
|
) : <DummyContainer />}
|
|
106
111
|
</Container>
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import React, { useEffect, useState, useRef } from 'react';
|
|
2
2
|
import { Pressable, StyleSheet, View, Keyboard } from 'react-native';
|
|
3
3
|
import Spinner from 'react-native-loading-spinner-overlay';
|
|
4
|
+
import { TouchableOpacity } from 'react-native-gesture-handler';
|
|
4
5
|
import { useForm, Controller } from 'react-hook-form';
|
|
5
6
|
import { PhoneInputNumber } from '../PhoneInputNumber'
|
|
6
7
|
import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons'
|
|
8
|
+
import Recaptcha from 'react-native-recaptcha-that-works'
|
|
7
9
|
|
|
8
10
|
import {
|
|
9
11
|
LoginForm as LoginFormController,
|
|
@@ -28,7 +30,8 @@ import {
|
|
|
28
30
|
OTab,
|
|
29
31
|
SocialButtons,
|
|
30
32
|
OrSeparator,
|
|
31
|
-
LineSeparator
|
|
33
|
+
LineSeparator,
|
|
34
|
+
RecaptchaButton
|
|
32
35
|
} from './styles';
|
|
33
36
|
|
|
34
37
|
import { _removeStoreData } from '../../providers/StoreUtil';
|
|
@@ -56,7 +59,9 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
56
59
|
handleSendVerifyCode,
|
|
57
60
|
handleCheckPhoneCode,
|
|
58
61
|
onNavigationRedirect,
|
|
59
|
-
notificationState
|
|
62
|
+
notificationState,
|
|
63
|
+
handleReCaptcha,
|
|
64
|
+
enableReCaptcha
|
|
60
65
|
} = props
|
|
61
66
|
|
|
62
67
|
const theme = useTheme()
|
|
@@ -70,6 +75,10 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
70
75
|
marginBottom: 25,
|
|
71
76
|
borderWidth: 1,
|
|
72
77
|
borderColor: theme.colors.disabled
|
|
78
|
+
},
|
|
79
|
+
recaptchaIcon: {
|
|
80
|
+
width: 100,
|
|
81
|
+
height: 100,
|
|
73
82
|
}
|
|
74
83
|
});
|
|
75
84
|
|
|
@@ -89,9 +98,13 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
89
98
|
cellphone: null
|
|
90
99
|
}
|
|
91
100
|
});
|
|
92
|
-
|
|
101
|
+
const [recaptchaConfig, setRecaptchaConfig] = useState<any>({})
|
|
102
|
+
const [recaptchaVerified, setRecaptchaVerified] = useState(false)
|
|
103
|
+
const recaptchaRef = useRef<any>({});
|
|
93
104
|
const inputRef = useRef<any>({})
|
|
94
105
|
|
|
106
|
+
const googleLoginEnabled = configs?.google_login_enabled?.value === '1' || !configs?.google_login_enabled?.enabled
|
|
107
|
+
|
|
95
108
|
const anySocialButtonActivated = ((configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') && configs?.facebook_id?.value) ||
|
|
96
109
|
(configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) ||
|
|
97
110
|
(configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null)
|
|
@@ -150,6 +163,40 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
150
163
|
onChange(value.toLowerCase().replace(/[&,()%";:ç?<>{}\\[\]\s]/g, ''))
|
|
151
164
|
}
|
|
152
165
|
|
|
166
|
+
const handleOpenRecaptcha = () => {
|
|
167
|
+
setRecaptchaVerified(false)
|
|
168
|
+
|
|
169
|
+
if (recaptchaVerified) {
|
|
170
|
+
handleReCaptcha && handleReCaptcha('')
|
|
171
|
+
return
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
if (!recaptchaConfig?.siteKey) {
|
|
175
|
+
showToast(ToastType.Error, t('NO_RECAPTCHA_SITE_KEY', 'The config doesn\'t have recaptcha site key'));
|
|
176
|
+
return
|
|
177
|
+
}
|
|
178
|
+
if (!recaptchaConfig?.baseUrl) {
|
|
179
|
+
showToast(ToastType.Error, t('NO_RECAPTCHA_BASE_URL', 'The config doesn\'t have recaptcha base url'));
|
|
180
|
+
return
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
recaptchaRef.current.open()
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
const onRecaptchaVerify = (token: any) => {
|
|
187
|
+
setRecaptchaVerified(true)
|
|
188
|
+
handleReCaptcha && handleReCaptcha(token)
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
useEffect(() => {
|
|
192
|
+
if (configs && Object.keys(configs).length > 0 && enableReCaptcha) {
|
|
193
|
+
setRecaptchaConfig({
|
|
194
|
+
siteKey: configs?.security_recaptcha_site_key?.value || null,
|
|
195
|
+
baseUrl: configs?.security_recaptcha_base_url?.value || null
|
|
196
|
+
})
|
|
197
|
+
}
|
|
198
|
+
}, [configs, enableReCaptcha])
|
|
199
|
+
|
|
153
200
|
useEffect(() => {
|
|
154
201
|
if (!formState.loading && formState.result?.error) {
|
|
155
202
|
formState.result?.result && showToast(
|
|
@@ -315,6 +362,48 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
315
362
|
rules={{ required: t('VALIDATION_ERROR_PASSWORD_REQUIRED', 'The field Password is required').replace('_attribute_', t('PASSWORD', 'Password')) }}
|
|
316
363
|
defaultValue=""
|
|
317
364
|
/>
|
|
365
|
+
|
|
366
|
+
{enableReCaptcha && (
|
|
367
|
+
<>
|
|
368
|
+
<TouchableOpacity
|
|
369
|
+
onPress={handleOpenRecaptcha}
|
|
370
|
+
>
|
|
371
|
+
<RecaptchaButton>
|
|
372
|
+
{recaptchaVerified ? (
|
|
373
|
+
<MaterialCommunityIcons
|
|
374
|
+
name="checkbox-marked"
|
|
375
|
+
size={26}
|
|
376
|
+
color={theme.colors.primary}
|
|
377
|
+
/>
|
|
378
|
+
) : (
|
|
379
|
+
<MaterialCommunityIcons
|
|
380
|
+
name="checkbox-blank-outline"
|
|
381
|
+
size={26}
|
|
382
|
+
color={theme.colors.mediumGray}
|
|
383
|
+
/>
|
|
384
|
+
)}
|
|
385
|
+
<OText size={14} mLeft={8}>{t('VERIFY_ReCAPTCHA', 'Verify reCAPTCHA')}</OText>
|
|
386
|
+
</RecaptchaButton>
|
|
387
|
+
</TouchableOpacity>
|
|
388
|
+
<Recaptcha
|
|
389
|
+
ref={recaptchaRef}
|
|
390
|
+
siteKey={recaptchaConfig?.siteKey}
|
|
391
|
+
baseUrl={recaptchaConfig?.baseUrl}
|
|
392
|
+
onVerify={onRecaptchaVerify}
|
|
393
|
+
onExpire={() => setRecaptchaVerified(false)}
|
|
394
|
+
footerComponent={<OButton
|
|
395
|
+
onClick={() => recaptchaRef.current.close()}
|
|
396
|
+
style={{ borderRadius: 0 }}
|
|
397
|
+
text={t('CLOSE', 'Close')}
|
|
398
|
+
bgColor={theme.colors.primary}
|
|
399
|
+
borderColor={theme.colors.primary}
|
|
400
|
+
textStyle={{ color: 'white' }}
|
|
401
|
+
imgRightSrc={null}
|
|
402
|
+
/>}
|
|
403
|
+
/>
|
|
404
|
+
</>
|
|
405
|
+
)}
|
|
406
|
+
|
|
318
407
|
<OButton
|
|
319
408
|
onClick={handleSubmit(onSubmit)}
|
|
320
409
|
text={loginButtonText}
|
|
@@ -367,13 +456,13 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
367
456
|
}
|
|
368
457
|
|
|
369
458
|
{configs && Object.keys(configs).length > 0 && anySocialButtonActivated && (
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
459
|
+
<ButtonsWrapper>
|
|
460
|
+
<OText size={18} mBottom={10} color={theme.colors.disabled}>
|
|
461
|
+
{t('SELECT_AN_OPTION_TO_LOGIN', 'Select an option to login')}
|
|
462
|
+
</OText>
|
|
463
|
+
<SocialButtons>
|
|
464
|
+
{(configs?.facebook_login?.value === 'true' || configs?.facebook_login?.value === '1') &&
|
|
465
|
+
configs?.facebook_id?.value && (
|
|
377
466
|
<FacebookLogin
|
|
378
467
|
notificationState={notificationState}
|
|
379
468
|
handleErrors={(err: any) => showToast(ToastType.Error, err)}
|
|
@@ -381,26 +470,26 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
381
470
|
handleSuccessFacebookLogin={handleSuccessFacebook}
|
|
382
471
|
/>
|
|
383
472
|
)}
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
473
|
+
{(configs?.google_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && googleLoginEnabled && (
|
|
474
|
+
<GoogleLogin
|
|
475
|
+
notificationState={notificationState}
|
|
476
|
+
webClientId={configs?.google_login_client_id?.value}
|
|
477
|
+
handleErrors={(err: any) => showToast(ToastType.Error, err)}
|
|
478
|
+
handleLoading={(val: boolean) => setIsLoadingSocialButton(val)}
|
|
479
|
+
handleSuccessGoogleLogin={handleSuccessFacebook}
|
|
480
|
+
/>
|
|
481
|
+
)}
|
|
482
|
+
{(configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && (
|
|
483
|
+
<AppleLogin
|
|
484
|
+
notificationState={notificationState}
|
|
485
|
+
handleErrors={(err: any) => showToast(ToastType.Error, err)}
|
|
486
|
+
handleLoading={(val: boolean) => setIsLoadingSocialButton(val)}
|
|
487
|
+
handleSuccessApple={handleSuccessApple}
|
|
488
|
+
/>
|
|
489
|
+
)}
|
|
490
|
+
</SocialButtons>
|
|
491
|
+
</ButtonsWrapper>
|
|
492
|
+
)}
|
|
404
493
|
|
|
405
494
|
{onNavigationRedirect && registerButtonText && (
|
|
406
495
|
<ButtonsWrapper>
|
|
@@ -438,6 +527,7 @@ const LoginFormUI = (props: LoginParams) => {
|
|
|
438
527
|
export const LoginForm = (props: any) => {
|
|
439
528
|
const loginProps = {
|
|
440
529
|
...props,
|
|
530
|
+
isRecaptchaEnable: true,
|
|
441
531
|
UIComponent: LoginFormUI,
|
|
442
532
|
handleSuccessLogin: () => _removeStoreData('isGuestUser')
|
|
443
533
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import React, { useState, useEffect
|
|
2
|
-
import { View, StyleSheet, BackHandler, TouchableOpacity, I18nManager
|
|
1
|
+
import React, { useState, useEffect } from 'react'
|
|
2
|
+
import { View, StyleSheet, BackHandler, TouchableOpacity, I18nManager } from 'react-native'
|
|
3
3
|
import LinearGradient from 'react-native-linear-gradient'
|
|
4
4
|
import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
|
|
5
5
|
import MaterialCommunityIcon from 'react-native-vector-icons/MaterialCommunityIcons'
|
|
@@ -109,7 +109,6 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
109
109
|
const [isReviewed, setIsReviewed] = useState(false)
|
|
110
110
|
const [openOrderCreating, setOpenOrderCreating] = useState(false)
|
|
111
111
|
const [openTaxModal, setOpenTaxModal] = useState<any>({ open: false, tax: null, type: '' })
|
|
112
|
-
const appState = useRef(AppState.currentState)
|
|
113
112
|
|
|
114
113
|
const { order, loading, businessData, error } = props.order
|
|
115
114
|
|
|
@@ -259,24 +258,6 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
259
258
|
})
|
|
260
259
|
}, [])
|
|
261
260
|
|
|
262
|
-
useEffect(() => {
|
|
263
|
-
const onFocusApp = (nextAppState: any) => {
|
|
264
|
-
if (
|
|
265
|
-
appState.current.match(/inactive|background/) &&
|
|
266
|
-
nextAppState === "active"
|
|
267
|
-
) {
|
|
268
|
-
getOrder && getOrder()
|
|
269
|
-
}
|
|
270
|
-
appState.current = nextAppState;
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
AppState.addEventListener("change", onFocusApp);
|
|
274
|
-
return () => {
|
|
275
|
-
AppState.removeEventListener('change', onFocusApp);
|
|
276
|
-
};
|
|
277
|
-
}, [])
|
|
278
|
-
|
|
279
|
-
|
|
280
261
|
return (
|
|
281
262
|
<OrderDetailsContainer keyboardShouldPersistTaps='handled'>
|
|
282
263
|
{order && order?.id && !error && !loading && (
|
|
@@ -400,6 +381,11 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
|
|
|
400
381
|
<InfoBlock>
|
|
401
382
|
<OText size={18} style={{ textAlign: 'left' }} >{order?.customer?.name} {order?.customer?.lastname}</OText>
|
|
402
383
|
<OText style={{ textAlign: 'left' }}>{order?.customer?.address}</OText>
|
|
384
|
+
{(!!order?.customer?.cellphone) && (
|
|
385
|
+
<OText size={18} style={{ textAlign: 'left' }}>
|
|
386
|
+
{(order?.customer?.country_phone_code) && `+${(order?.customer?.country_phone_code)} `}{(order?.customer?.cellphone)}
|
|
387
|
+
</OText>
|
|
388
|
+
)}
|
|
403
389
|
</InfoBlock>
|
|
404
390
|
</Customer>
|
|
405
391
|
{order?.delivery_option !== undefined && order?.delivery_type === 1 && (
|