ordering-ui-react-native 0.15.26 → 0.15.27-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.
Files changed (165) hide show
  1. package/package.json +3 -2
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessController/index.tsx +8 -2
  4. package/src/components/BusinessTypeFilter/index.tsx +4 -1
  5. package/src/components/BusinessesListing/index.tsx +1 -1
  6. package/src/components/Checkout/index.tsx +23 -3
  7. package/src/components/DriverTips/index.tsx +11 -6
  8. package/src/components/LanguageSelector/index.tsx +7 -2
  9. package/src/components/OrderDetails/index.tsx +2 -2
  10. package/src/components/PaymentOptions/index.tsx +9 -16
  11. package/src/components/PaymentOptionsWebView/index.tsx +123 -124
  12. package/src/components/SingleProductCard/index.tsx +16 -4
  13. package/src/components/StripeElementsForm/index.tsx +27 -48
  14. package/src/components/UpsellingProducts/index.tsx +1 -1
  15. package/src/components/UserProfileForm/index.tsx +63 -6
  16. package/src/components/UserProfileForm/styles.tsx +8 -0
  17. package/src/components/VerifyPhone/styles.tsx +1 -2
  18. package/src/components/shared/OModal.tsx +1 -1
  19. package/src/config.json +0 -2
  20. package/src/hooks/useCountdownTimer.tsx +26 -0
  21. package/src/navigators/HomeNavigator.tsx +6 -0
  22. package/src/pages/BusinessProductsList.tsx +1 -0
  23. package/src/pages/BusinessesListing.tsx +1 -1
  24. package/src/pages/Checkout.tsx +1 -1
  25. package/src/pages/Sessions.tsx +22 -0
  26. package/src/types/index.tsx +5 -11
  27. package/src/utils/index.tsx +68 -1
  28. package/themes/business/index.tsx +2 -0
  29. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +103 -15
  30. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -0
  31. package/themes/business/src/components/Chat/index.tsx +38 -86
  32. package/themes/business/src/components/Home/index.tsx +128 -55
  33. package/themes/business/src/components/Home/styles.tsx +8 -1
  34. package/themes/business/src/components/LoginForm/index.tsx +89 -2
  35. package/themes/business/src/components/LoginForm/styles.tsx +6 -0
  36. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  37. package/themes/business/src/components/NewOrderNotification/index.tsx +79 -105
  38. package/themes/business/src/components/OrderDetails/Business.tsx +2 -1
  39. package/themes/business/src/components/OrderDetails/Delivery.tsx +32 -15
  40. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +151 -89
  41. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +91 -17
  42. package/themes/business/src/components/OrderDetails/styles.tsx +7 -0
  43. package/themes/business/src/components/OrdersListManager/index.tsx +874 -0
  44. package/themes/business/src/components/OrdersListManager/styles.tsx +123 -0
  45. package/themes/business/src/components/OrdersListManager/utils.tsx +216 -0
  46. package/themes/business/src/components/OrdersOption/index.tsx +58 -51
  47. package/themes/business/src/components/PreviousOrders/index.tsx +75 -22
  48. package/themes/business/src/components/shared/OModal.tsx +1 -1
  49. package/themes/business/src/types/index.tsx +5 -1
  50. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  51. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  52. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  53. package/themes/kiosk/src/components/Cart/index.tsx +98 -24
  54. package/themes/kiosk/src/components/Cart/styles.tsx +6 -0
  55. package/themes/kiosk/src/components/CartBottomSheet/index.tsx +1 -1
  56. package/themes/kiosk/src/components/CartBottomSheet/styles.tsx +1 -1
  57. package/themes/kiosk/src/components/CartContent/index.tsx +13 -3
  58. package/themes/kiosk/src/components/CartItem/index.tsx +20 -8
  59. package/themes/kiosk/src/components/CustomerName/index.tsx +89 -88
  60. package/themes/kiosk/src/components/Intro/index.tsx +13 -13
  61. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  62. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  63. package/themes/kiosk/src/components/OrderDetails/index.tsx +136 -41
  64. package/themes/kiosk/src/components/OrderDetails/styles.tsx +5 -0
  65. package/themes/kiosk/src/components/OrderSummary/index.tsx +1 -1
  66. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +10 -12
  67. package/themes/kiosk/src/components/ProductForm/index.tsx +174 -125
  68. package/themes/kiosk/src/components/ProductForm/styles.tsx +1 -1
  69. package/themes/kiosk/src/components/ProductOption/index.tsx +1 -0
  70. package/themes/kiosk/src/components/ProductOption/styles.tsx +1 -0
  71. package/themes/kiosk/src/components/UpsellingProducts/index.tsx +48 -34
  72. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  73. package/themes/kiosk/src/types/index.d.ts +2 -0
  74. package/themes/original/index.tsx +178 -1
  75. package/themes/original/src/components/AddressForm/index.tsx +15 -10
  76. package/themes/original/src/components/AddressList/index.tsx +56 -18
  77. package/themes/original/src/components/AppleLogin/index.tsx +117 -78
  78. package/themes/original/src/components/BusinessBasicInformation/index.tsx +96 -45
  79. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +28 -1
  80. package/themes/original/src/components/BusinessController/index.tsx +52 -22
  81. package/themes/original/src/components/BusinessController/styles.tsx +22 -0
  82. package/themes/original/src/components/BusinessFeaturedController/index.tsx +20 -1
  83. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +23 -0
  84. package/themes/original/src/components/BusinessListingSearch/index.tsx +121 -7
  85. package/themes/original/src/components/BusinessListingSearch/styles.tsx +14 -1
  86. package/themes/original/src/components/BusinessMenuList/index.tsx +11 -4
  87. package/themes/original/src/components/BusinessPreorder/index.tsx +142 -122
  88. package/themes/original/src/components/BusinessProductsCategories/index.tsx +9 -7
  89. package/themes/original/src/components/BusinessProductsList/index.tsx +127 -20
  90. package/themes/original/src/components/BusinessProductsList/styles.tsx +29 -2
  91. package/themes/original/src/components/BusinessProductsListing/index.tsx +118 -37
  92. package/themes/original/src/components/BusinessProductsListing/styles.tsx +22 -0
  93. package/themes/original/src/components/BusinessReviews/index.tsx +4 -25
  94. package/themes/original/src/components/BusinessTypeFilter/index.tsx +1 -2
  95. package/themes/original/src/components/BusinessesListing/index.tsx +53 -60
  96. package/themes/original/src/components/Cart/index.tsx +21 -17
  97. package/themes/original/src/components/CartContent/index.tsx +2 -2
  98. package/themes/original/src/components/Checkout/index.tsx +58 -45
  99. package/themes/original/src/components/DriverTips/index.tsx +17 -12
  100. package/themes/original/src/components/ForgotPasswordForm/index.tsx +84 -4
  101. package/themes/original/src/components/GoogleMap/index.tsx +1 -0
  102. package/themes/original/src/components/Help/index.tsx +21 -4
  103. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +97 -89
  104. package/themes/original/src/components/Home/index.tsx +1 -1
  105. package/themes/original/src/components/LastOrders/index.tsx +12 -1
  106. package/themes/original/src/components/LoginForm/Otp/index.tsx +90 -0
  107. package/themes/original/src/components/LoginForm/Otp/styles.tsx +7 -0
  108. package/themes/original/src/components/LoginForm/index.tsx +389 -156
  109. package/themes/original/src/components/LoginForm/styles.tsx +7 -4
  110. package/themes/original/src/components/LogoutButton/index.tsx +7 -1
  111. package/themes/original/src/components/MessageListing/index.tsx +10 -1
  112. package/themes/original/src/components/Messages/index.tsx +34 -25
  113. package/themes/original/src/components/Messages/styles.tsx +1 -3
  114. package/themes/original/src/components/MomentOption/index.tsx +10 -1
  115. package/themes/original/src/components/MomentOption/styles.tsx +1 -1
  116. package/themes/original/src/components/OrderDetails/index.tsx +56 -33
  117. package/themes/original/src/components/OrderDetails/styles.tsx +1 -2
  118. package/themes/original/src/components/OrderProgress/index.tsx +4 -4
  119. package/themes/original/src/components/OrderProgress/styles.tsx +1 -0
  120. package/themes/original/src/components/OrderSummary/index.tsx +3 -3
  121. package/themes/original/src/components/OrderTypeSelector/index.tsx +4 -2
  122. package/themes/original/src/components/OrdersOption/index.tsx +55 -58
  123. package/themes/original/src/components/OrdersOption/styles.tsx +0 -6
  124. package/themes/original/src/components/PaymentOptionCash/index.tsx +2 -2
  125. package/themes/original/src/components/PaymentOptionWallet/index.tsx +22 -24
  126. package/themes/original/src/components/PaymentOptionWallet/styles.tsx +1 -1
  127. package/themes/original/src/components/PaymentOptions/index.tsx +9 -19
  128. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  129. package/themes/original/src/components/PreviousOrders/index.tsx +16 -14
  130. package/themes/original/src/components/ProductForm/index.tsx +76 -61
  131. package/themes/original/src/components/ProductForm/styles.tsx +2 -2
  132. package/themes/original/src/components/ProductItemAccordion/index.tsx +2 -2
  133. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -12
  134. package/themes/original/src/components/Promotions/index.tsx +250 -0
  135. package/themes/original/src/components/Promotions/styles.tsx +60 -0
  136. package/themes/original/src/components/ReviewOrder/index.tsx +10 -9
  137. package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
  138. package/themes/original/src/components/SearchBar/index.tsx +4 -1
  139. package/themes/original/src/components/Sessions/index.tsx +160 -0
  140. package/themes/original/src/components/Sessions/styles.tsx +15 -0
  141. package/themes/original/src/components/SingleProductCard/index.tsx +47 -21
  142. package/themes/original/src/components/SingleProductCard/styles.tsx +28 -1
  143. package/themes/original/src/components/StripeElementsForm/index.tsx +55 -72
  144. package/themes/original/src/components/TaxInformation/index.tsx +10 -4
  145. package/themes/original/src/components/UpsellingProducts/index.tsx +87 -75
  146. package/themes/original/src/components/UserDetails/index.tsx +4 -95
  147. package/themes/original/src/components/UserFormDetails/index.tsx +34 -24
  148. package/themes/original/src/components/UserProfile/index.tsx +62 -14
  149. package/themes/original/src/components/UserProfileForm/index.tsx +20 -18
  150. package/themes/original/src/components/UserVerification/index.tsx +178 -192
  151. package/themes/original/src/components/VerifyPhone/index.tsx +10 -7
  152. package/themes/original/src/components/VerifyPhone/styles.tsx +2 -1
  153. package/themes/original/src/components/Wallets/index.tsx +76 -9
  154. package/themes/original/src/components/Wallets/styles.tsx +21 -0
  155. package/themes/original/src/components/shared/HeaderTitle.tsx +21 -0
  156. package/themes/original/src/components/shared/OModal.tsx +1 -1
  157. package/themes/original/src/components/shared/index.tsx +2 -0
  158. package/themes/original/src/config/constants.tsx +6 -6
  159. package/themes/original/src/types/index.tsx +68 -6
  160. package/themes/original/src/utils/index.tsx +28 -2
  161. package/themes/single-business/src/components/AddressList/index.tsx +1 -1
  162. package/themes/single-business/src/components/OrderTypeSelector/index.tsx +6 -6
  163. package/themes/single-business/src/components/UserProfile/index.tsx +1 -1
  164. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
  165. package/src/components/StripeMethodForm/index.tsx +0 -168
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ordering-ui-react-native",
3
- "version": "0.15.26",
3
+ "version": "0.15.27-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#development",
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",
@@ -99,6 +99,7 @@
99
99
  "react-native-picker-select": "^8.0.4",
100
100
  "react-native-print": "^0.9.0",
101
101
  "react-native-reanimated": "^1.13.1",
102
+ "react-native-recaptcha-that-works": "^1.2.0",
102
103
  "react-native-restart": "^0.0.22",
103
104
  "react-native-safe-area-context": "^3.1.8",
104
105
  "react-native-screens": "^2.11.0",
@@ -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.',
@@ -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,9 +146,14 @@ 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
- <OText color={theme.colors.white} size={20} style={styles.businessStateText}>
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
+ <OText color={theme.colors.white} size={18} style={styles.businessStateText}>
151
157
  {t('PREORDER', 'PREORDER')}
152
158
  </OText>
153
159
  </View>
@@ -1,5 +1,5 @@
1
1
  import React, { useState } from 'react'
2
- import { StyleSheet, View, ScrollView, TouchableOpacity, Dimensions, Platform, PlatformIOSStatic } from 'react-native'
2
+ import { StyleSheet, View, ScrollView, Dimensions, Platform, PlatformIOSStatic, Pressable } 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
 
@@ -9,6 +9,7 @@ import { BusinessTypeFilterParams } from '../../types'
9
9
  import { useTheme } from 'styled-components/native'
10
10
  import MaterialIcon from 'react-native-vector-icons/MaterialCommunityIcons';
11
11
  import DeviceInfo from 'react-native-device-info';
12
+ import { TouchableOpacity } from 'react-native-gesture-handler'
12
13
 
13
14
  const windowWidth = Dimensions.get('window').width;
14
15
 
@@ -71,11 +72,13 @@ export const BusinessTypeFilterUI = (props: BusinessTypeFilterParams) => {
71
72
  <OIcon
72
73
  url={item.image}
73
74
  style={styles.logo}
75
+ cover
74
76
  />
75
77
  ) : (
76
78
  <OIcon
77
79
  src={theme.images.categories.all}
78
80
  style={styles.logo}
81
+ cover
79
82
  />
80
83
  )}
81
84
  <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', 'You are far from this address')}</OText>
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>
@@ -529,7 +529,6 @@ const CheckoutUI = (props: any) => {
529
529
  paySelected={paymethodSelected}
530
530
  handlePaymentMethodClickCustom={handlePaymentMethodClick}
531
531
  setCardData={setCardData}
532
- handlePlaceOrder={handlePlaceOrder}
533
532
  />
534
533
  </ChPaymethods>
535
534
  </ChSection>
@@ -592,6 +591,19 @@ const CheckoutUI = (props: any) => {
592
591
  {t('WARNING_INVALID_PRODUCTS', 'Some products are invalid, please check them.')}
593
592
  </OText>
594
593
  )}
594
+
595
+ {options.type === 1 &&
596
+ validationFields?.fields?.checkout?.driver_tip?.enabled &&
597
+ validationFields?.fields?.checkout?.driver_tip?.required &&
598
+ (Number(cart?.driver_tip) <= 0) && (
599
+ <OText
600
+ style={{ textAlign: 'center' }}
601
+ color={theme.colors.error}
602
+ size={14}
603
+ >
604
+ {t('WARNING_INVALID_DRIVER_TIP', 'Driver Tip is required.')}
605
+ </OText>
606
+ )}
595
607
  </ChErrors>
596
608
  </ChSection>
597
609
  )}
@@ -602,8 +614,16 @@ const CheckoutUI = (props: any) => {
602
614
  <>
603
615
  <FloatingButton
604
616
  handleClick={() => handlePlaceOrder()}
605
- isSecondaryBtn={loading || !cart?.valid || !paymethodSelected || placing || errorCash || cart?.subtotal_to_calculate < cart?.minimum || paymethodSelected?.gateway === 'paypal'}
606
- disabled={loading || !cart?.valid || !paymethodSelected || placing || errorCash || cart?.subtotal_to_calculate < cart?.minimum || paymethodSelected?.gateway === 'paypal'}
617
+ isSecondaryBtn={loading || !cart?.valid || !paymethodSelected || placing || errorCash || cart?.subtotal_to_calculate < cart?.minimum || paymethodSelected?.gateway === 'paypal' ||
618
+ (options.type === 1 &&
619
+ validationFields?.fields?.checkout?.driver_tip?.enabled &&
620
+ validationFields?.fields?.checkout?.driver_tip?.required &&
621
+ (Number(cart?.driver_tip) <= 0))}
622
+ disabled={loading || !cart?.valid || !paymethodSelected || placing || errorCash || cart?.subtotal_to_calculate < cart?.minimum || paymethodSelected?.gateway === 'paypal' ||
623
+ (options.type === 1 &&
624
+ validationFields?.fields?.checkout?.driver_tip?.enabled &&
625
+ validationFields?.fields?.checkout?.driver_tip?.required &&
626
+ (Number(cart?.driver_tip) <= 0))}
607
627
  btnText={cart?.subtotal_to_calculate >= cart?.minimum
608
628
  ? (
609
629
  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(0);
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
- let tip = parseFloat(val)
61
- tip = isNaN(tip) ? 0 : tip
62
- setvalue(tip)
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={!(value > 0 && value !== driverTip) || !value}
129
+ isDisabled={parseFloat(value || '0') < 0 || parseFloat(value || '0') === driverTip || value === ''}
125
130
  onClick={() => {
126
131
  handlerChangeOption(value)
127
- setvalue(0)
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>
@@ -514,7 +514,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
514
514
  </Table>
515
515
  )}
516
516
  {
517
- order?.taxes?.length === 0 && order?.tax_type === 2 && (
517
+ order?.taxes?.length === 0 && order?.tax_type === 2 && order?.summary?.tax > 0 && (
518
518
  <Table>
519
519
  <OText>
520
520
  {t('TAX', 'Tax')} {`(${verifyDecimals(order?.tax, parseNumber)}%)`}
@@ -524,7 +524,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
524
524
  )
525
525
  }
526
526
  {
527
- order?.fees?.length === 0 && (
527
+ order?.fees?.length === 0 && order?.summary?.service_fee > 0 && (
528
528
  <Table>
529
529
  <OText>
530
530
  {t('SERVICE_FEE', 'Service fee')}
@@ -61,13 +61,12 @@ const PaymentOptionsUI = (props: any) => {
61
61
  handlePaymethodDataChange,
62
62
  handlePaymentMethodClickCustom,
63
63
  isOpenMethod,
64
- setCardData,
65
- handlePlaceOrder
64
+ setCardData
66
65
  } = props
67
66
 
68
67
  const theme = useTheme();
69
68
  const [, t] = useLanguage();
70
- const methodsPay = ['google_pay', 'apple_pay']
69
+ const methodsPay = ['google_pay']
71
70
  const stripeDirectMethods = ['stripe_direct', ...methodsPay]
72
71
 
73
72
  const [addCardOpen, setAddCardOpen] = useState({ stripe: false, stripeConnect: false });
@@ -122,11 +121,8 @@ const PaymentOptionsUI = (props: any) => {
122
121
  }, [props.paySelected])
123
122
 
124
123
  useEffect(() => {
125
- setCardData && setCardData(paymethodData)
126
- if (methodsPay.includes(paymethodSelected?.gateway) && paymethodData?.id && paymethodSelected?.data?.card) {
127
- handlePlaceOrder()
128
- }
129
- }, [paymethodData, paymethodSelected])
124
+ setCardData(paymethodData)
125
+ }, [paymethodData])
130
126
 
131
127
  const renderPaymethods = ({ item }: any) => {
132
128
  return (
@@ -156,7 +152,7 @@ const PaymentOptionsUI = (props: any) => {
156
152
  )
157
153
  }
158
154
 
159
- const excludeGateway: any = ['stripe_connect', 'stripe_redirect']; //exclude connect & redirect
155
+ const excludeGateway: any = ['stripe_connect', 'stripe_redirect', 'apple_pay']; //exclude connect & redirect & apple pay
160
156
 
161
157
  return (
162
158
  <PMContainer>
@@ -285,11 +281,11 @@ const PaymentOptionsUI = (props: any) => {
285
281
  </KeyboardAvoidingView>
286
282
  </OModal>
287
283
 
288
- {/* Stripe direct, Google pay, Apple pay */}
284
+ {/* Stripe direct */}
289
285
  <OModal
290
286
  entireModal
291
287
  title={t('ADD_CREDIT_OR_DEBIT_CARD', 'Add credit or debit card')}
292
- open={stripeDirectMethods?.includes(isOpenMethod?.paymethod?.gateway) && !paymethodData.id}
288
+ open={isOpenMethod?.paymethod?.gateway === 'stripe_direct' && !paymethodData?.id}
293
289
  onClose={() => handlePaymethodClick(null)}
294
290
  >
295
291
  <KeyboardAvoidingView
@@ -298,13 +294,10 @@ const PaymentOptionsUI = (props: any) => {
298
294
  enabled={Platform.OS === 'ios' ? true : false}
299
295
  >
300
296
  <StripeElementsForm
301
- cart={cart}
302
- paymethod={isOpenMethod?.paymethod?.gateway}
303
- methodsPay={methodsPay}
304
297
  businessId={props.businessId}
305
- publicKey={isOpenMethod?.paymethod?.credentials?.publishable || isOpenMethod?.paymethod?.credentials?.publishable_key}
298
+ publicKey={isOpenMethod?.paymethod?.credentials?.publishable}
306
299
  handleSource={handlePaymethodDataChange}
307
- onCancel={() => handlePaymethodClick(null)}
300
+ onCancel={() => handlePaymethodClick(false)}
308
301
  />
309
302
  </KeyboardAvoidingView>
310
303
  </OModal>
@@ -5,147 +5,146 @@ import WebView from 'react-native-webview';
5
5
  import { ActivityIndicator } from 'react-native-paper';
6
6
 
7
7
  import {
8
- ToastType,
9
- useToast,
10
- useApi,
11
- useLanguage,
12
- useConfig
8
+ ToastType,
9
+ useToast,
10
+ useApi,
11
+ useLanguage,
12
+ useConfig
13
13
  } from 'ordering-components/native';
14
14
 
15
15
  import { OText } from '../shared';
16
16
 
17
17
  interface PaymentOptionsWebViewParams {
18
- onNavigationRedirect?: Function,
19
- uri?: any,
20
- user?: any,
21
- token?: any,
22
- cart?: any,
23
- currency?: any,
24
- webviewPaymethod?: any,
25
- setShowGateway?: any,
26
- setOpenOrderCreating?: any,
27
- locationId?: any
18
+ onNavigationRedirect?: Function,
19
+ uri?: any,
20
+ user?: any,
21
+ token?: any,
22
+ cart?: any,
23
+ currency?: any,
24
+ webviewPaymethod?: any,
25
+ setShowGateway?: any,
26
+ setOpenOrderCreating?: any,
27
+ locationId?: any
28
28
  }
29
29
  export const PaymentOptionsWebView = (props: PaymentOptionsWebViewParams) => {
30
- const {
31
- onNavigationRedirect,
32
- uri,
33
- user,
34
- token,
35
- cart,
36
- currency,
37
- webviewPaymethod,
38
- setShowGateway,
39
- setOpenOrderCreating,
40
- locationId
41
- } = props
30
+ const {
31
+ onNavigationRedirect,
32
+ uri,
33
+ user,
34
+ token,
35
+ cart,
36
+ currency,
37
+ webviewPaymethod,
38
+ setShowGateway,
39
+ setOpenOrderCreating,
40
+ locationId
41
+ } = props
42
42
 
43
- const webviewRef = useRef<any>(null)
44
- const [, { showToast }] = useToast();
45
- const [ordering] = useApi()
46
- const [{ configs }] = useConfig();
47
- const [, t] = useLanguage();
43
+ const webviewRef = useRef<any>(null)
44
+ const [, { showToast }] = useToast();
45
+ const [ordering] = useApi()
46
+ const [{ configs }] = useConfig();
47
+ const [, t] = useLanguage();
48
48
 
49
+
50
+ const [progClr, setProgClr] = useState('#424242');
51
+ const [prog, setProg] = useState(true);
49
52
 
50
- const [progClr, setProgClr] = useState('#424242');
51
- const [prog, setProg] = useState(true);
52
-
53
- const handleCloseWebview = () => {
53
+ const handleCloseWebview = () => {
54
54
  setProg(true);
55
55
  setShowGateway({ open: false, closedByUser: true })
56
56
  }
57
57
 
58
- const onMessage = (e: any) => {
59
- if (e?.nativeEvent?.data && e?.nativeEvent?.data !== 'undefined') {
60
- let payment = JSON.parse(e.nativeEvent.data);
58
+ const onMessage = (e: any) => {
59
+ if (e?.nativeEvent?.data && e?.nativeEvent?.data !== 'undefined') {
60
+ let payment = JSON.parse(e.nativeEvent.data);
61
61
 
62
- if (payment === 'api error') {
63
- setShowGateway({ closedByUser: true, open: false })
64
- setProg(true);
65
- }
62
+ if (payment === 'api error') {
63
+ setShowGateway({ closedByUser: true, open: false })
64
+ setProg(true);
65
+ }
66
66
 
67
- if (payment) {
68
- if (payment.error) {
69
- showToast(ToastType.Error, payment.result)
70
- setOpenOrderCreating && setOpenOrderCreating(false)
71
- } else if (payment?.result?.order?.uuid) {
72
- showToast(ToastType.Success, t('ORDER_PLACED_SUCCESSfULLY', 'The order was placed successfully'))
73
- onNavigationRedirect && onNavigationRedirect('OrderDetails', { orderId: payment?.result?.order?.uuid, isFromCheckout: true })
67
+ if (payment) {
68
+ if (payment.error) {
69
+ showToast(ToastType.Error, payment.result)
70
+ setOpenOrderCreating && setOpenOrderCreating(false)
71
+ } else if (payment?.result?.order?.uuid) {
72
+ showToast(ToastType.Success, t('ORDER_PLACED_SUCCESSfULLY', 'The order was placed successfully'))
73
+ onNavigationRedirect && onNavigationRedirect('OrderDetails', { orderId: payment?.result?.order?.uuid, isFromCheckout: true})
74
+ }
75
+ setProg(true);
76
+ setShowGateway({ closedByUser: false, open: false })
77
+ }
74
78
  }
75
- setProg(true);
76
- setShowGateway({ closedByUser: false, open: false })
77
- }
78
- }
79
- }
79
+ }
80
80
 
81
- return (
81
+ return (
82
82
  <View style={{ zIndex: 9999, height: '100%', width: '100%', position: 'absolute', backgroundColor: 'white' }}>
83
- <Icon
84
- name="x"
85
- size={35}
86
- style={{ backgroundColor: 'white', paddingTop: 30, paddingLeft: 10 }}
87
- onPress={handleCloseWebview}
88
- />
89
- <OText
90
- style={{
91
- textAlign: 'center',
92
- fontSize: 16,
93
- fontWeight: 'bold',
94
- color: '#00457C',
95
- marginBottom: 5,
96
- marginTop: 10
97
- }}>
98
- {webviewPaymethod?.gateway === 'paypal' ? (t('PAYPAL_GATEWAY', 'PayPal GateWay')) : (t('SQUARE_PAYMENT', 'Square payment'))}
99
- </OText>
100
- <View style={{ padding: 20, opacity: prog ? 1 : 0, backgroundColor: 'white' }}>
101
- <ActivityIndicator size={24} color={progClr} />
102
- </View>
103
- <WebView
104
- source={{ uri: uri }}
105
- onMessage={onMessage}
106
- ref={webviewRef}
107
- javaScriptEnabled={true}
108
- javaScriptEnabledAndroid={true}
109
- cacheEnabled={false}
110
- cacheMode='LOAD_NO_CACHE'
111
- style={{ flex: 1 }}
112
- onShouldStartLoadWithRequest={() => true}
113
- onLoadStart={() => {
114
- setProg(true);
115
- setProgClr('#424242');
116
- }}
117
- onLoadProgress={() => {
118
- setProg(true);
119
- setProgClr('#00457C');
120
- }}
121
- onLoad={() => {
122
- setProg(true);
123
- setProgClr('#00457C');
124
- }}
125
- onLoadEnd={(e) => {
126
- const messageParams = locationId ? { locationId, clientId: webviewPaymethod?.credentials?.application_id } : {}
127
- const message = {
128
- action: 'init',
129
- data: {
130
- urlPlace: `${ordering.root}/carts/${cart?.uuid}/place`,
131
- urlConfirm: `${ordering.root}/carts/${cart?.uuid}/confirm`,
132
- payData: {
133
- paymethod_id: webviewPaymethod?.id,
134
- amount: cart?.balance ?? cart?.total,
135
- delivery_zone_id: cart?.delivery_zone_id,
136
- user_id: user?.id,
137
- user_name: user?.name
138
- },
139
- currency: configs?.stripe_currency?.value || currency,
140
- userToken: token,
141
- clientId: webviewPaymethod?.credentials?.client_id,
142
- ...messageParams
143
- }
144
- }
145
- setProg(false);
146
- webviewRef?.current?.postMessage?.(JSON.stringify(message))
147
- }}
148
- />
83
+ <Icon
84
+ name="x"
85
+ size={35}
86
+ style={{ backgroundColor: 'white', paddingTop: 30, paddingLeft: 10 }}
87
+ onPress={handleCloseWebview}
88
+ />
89
+ <OText
90
+ style={{
91
+ textAlign: 'center',
92
+ fontSize: 16,
93
+ fontWeight: 'bold',
94
+ color: '#00457C',
95
+ marginBottom: 5,
96
+ marginTop: 10
97
+ }}>
98
+ {webviewPaymethod?.gateway === 'paypal' ? (t('PAYPAL_GATEWAY', 'PayPal GateWay')) : (t('SQUARE_PAYMENT', 'Square payment'))}
99
+ </OText>
100
+ <View style={{ padding: 20, opacity: prog ? 1 : 0, backgroundColor: 'white' }}>
101
+ <ActivityIndicator size={24} color={progClr} />
102
+ </View>
103
+ <WebView
104
+ source={{ uri: uri }}
105
+ onMessage={onMessage}
106
+ ref={webviewRef}
107
+ javaScriptEnabled={true}
108
+ javaScriptEnabledAndroid={true}
109
+ cacheEnabled={false}
110
+ cacheMode='LOAD_NO_CACHE'
111
+ style={{ flex: 1 }}
112
+ onShouldStartLoadWithRequest={() => true}
113
+ onLoadStart={() => {
114
+ setProg(true);
115
+ setProgClr('#424242');
116
+ }}
117
+ onLoadProgress={() => {
118
+ setProg(true);
119
+ setProgClr('#00457C');
120
+ }}
121
+ onLoad={() => {
122
+ setProg(true);
123
+ setProgClr('#00457C');
124
+ }}
125
+ onLoadEnd={(e) => {
126
+ const messageParams = locationId ? { locationId } : {}
127
+ const message = {
128
+ action: 'init',
129
+ data: {
130
+ urlPlace: `${ordering.root}/carts/${cart?.uuid}/place`,
131
+ urlConfirm: `${ordering.root}/carts/${cart?.uuid}/confirm`,
132
+ payData: {
133
+ paymethod_id: webviewPaymethod?.id,
134
+ amount: cart?.balance ?? cart?.total,
135
+ delivery_zone_id: cart?.delivery_zone_id,
136
+ user_id: user?.id,
137
+ user_name: user?.name
138
+ },
139
+ currency: configs?.stripe_currency?.value || currency,
140
+ userToken: token,
141
+ clientId: webviewPaymethod?.credentials?.client_id,
142
+ ...messageParams
143
+ }
144
+ }
145
+ setProg(false);
146
+ webviewRef?.current?.postMessage?.(JSON.stringify(message))
147
+ }}
148
+ />
149
149
  </View>
150
- )
151
- }
150
+ )}
@@ -10,6 +10,7 @@ import {
10
10
  import { StyleSheet } from 'react-native'
11
11
  import { OText, OIcon } from '../shared'
12
12
  import { useTheme } from 'styled-components/native'
13
+ import FastImage from 'react-native-fast-image'
13
14
 
14
15
  export const SingleProductCard = (props: SingleProductCardParams) => {
15
16
  const {
@@ -77,10 +78,21 @@ export const SingleProductCard = (props: SingleProductCardParams) => {
77
78
  activeOpacity={1}
78
79
  onPress={() => onProductClick?.(product)}
79
80
  >
80
- <OIcon
81
- url={optimizeImage(product?.images, 'h_200,c_limit')}
82
- style={styles.productStyle}
83
- />
81
+ {product?.images ? (
82
+ <FastImage
83
+ style={styles.productStyle}
84
+ source={{
85
+ uri: optimizeImage(product?.images, 'h_250,c_limit'),
86
+ priority: FastImage.priority.normal,
87
+ }}
88
+ resizeMode={FastImage.resizeMode.cover}
89
+ />
90
+ ) : (
91
+ <OIcon
92
+ src={theme?.images?.dummies?.product}
93
+ style={styles.productStyle}
94
+ />
95
+ )}
84
96
  <CardInfo>
85
97
  <OText numberOfLines={1} ellipsizeMode='tail' style={styles.textStyle}>{product?.name}</OText>
86
98
  <OText size={12} numberOfLines={2} ellipsizeMode='tail' style={styles.textStyle}>{product?.description}</OText>