ordering-ui-react-native 0.17.73 → 0.17.74-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 (231) hide show
  1. package/package.json +8 -7
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessInformation/index.tsx +10 -9
  4. package/src/components/BusinessesListing/index.tsx +1 -1
  5. package/src/components/OrderCreating/index.tsx +1 -21
  6. package/src/components/PaymentOptionsWebView/index.tsx +29 -8
  7. package/src/components/PhoneInputNumber/index.tsx +6 -2
  8. package/src/components/StripeMethodForm/index.tsx +136 -102
  9. package/src/components/VerifyPhone/styles.tsx +1 -2
  10. package/src/components/shared/OToast.tsx +3 -2
  11. package/src/types/index.tsx +5 -0
  12. package/src/utils/index.tsx +5 -0
  13. package/themes/business/index.tsx +2 -0
  14. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +28 -25
  15. package/themes/business/src/components/BusinessController/index.tsx +0 -1
  16. package/themes/business/src/components/Chat/index.tsx +149 -118
  17. package/themes/business/src/components/DriverMap/index.tsx +17 -6
  18. package/themes/business/src/components/DriverSchedule/index.tsx +45 -8
  19. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  20. package/themes/business/src/components/LoginForm/Otp/index.tsx +31 -3
  21. package/themes/business/src/components/LoginForm/index.tsx +15 -22
  22. package/themes/business/src/components/MapView/index.tsx +10 -10
  23. package/themes/business/src/components/MessagesOption/index.tsx +20 -93
  24. package/themes/business/src/components/NewOrderNotification/index.tsx +37 -21
  25. package/themes/business/src/components/NotFoundSource/index.tsx +2 -2
  26. package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
  27. package/themes/business/src/components/OrderDetails/Delivery.tsx +191 -6
  28. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +103 -39
  29. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +61 -60
  30. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
  31. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  32. package/themes/business/src/components/OrderMessage/index.tsx +19 -18
  33. package/themes/business/src/components/OrderSummary/index.tsx +114 -123
  34. package/themes/business/src/components/OrdersOption/index.tsx +17 -15
  35. package/themes/business/src/components/PreviousMessages/FooterMessageComponent.tsx +103 -0
  36. package/themes/business/src/components/PreviousMessages/index.tsx +97 -55
  37. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +17 -12
  38. package/themes/business/src/components/PreviousOrders/OrderList.tsx +88 -0
  39. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +1 -1
  40. package/themes/business/src/components/PreviousOrders/index.tsx +139 -174
  41. package/themes/business/src/components/ProductItemAccordion/index.tsx +27 -3
  42. package/themes/business/src/components/ReviewCustomer/index.tsx +18 -13
  43. package/themes/business/src/components/StoresList/index.tsx +3 -4
  44. package/themes/business/src/components/UserProfileForm/index.tsx +14 -15
  45. package/themes/business/src/components/shared/OLink.tsx +11 -3
  46. package/themes/business/src/components/shared/OModal.tsx +16 -9
  47. package/themes/business/src/components/shared/OText.tsx +6 -1
  48. package/themes/business/src/types/index.tsx +25 -10
  49. package/themes/business/src/utils/index.tsx +29 -2
  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/Checkout/index.tsx +6 -0
  54. package/themes/kiosk/src/components/Intro/index.tsx +16 -1
  55. package/themes/kiosk/src/components/LoginForm/index.tsx +7 -9
  56. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  57. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  58. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  59. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +2 -2
  60. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  61. package/themes/original/index.tsx +1 -1
  62. package/themes/original/src/components/AddressDetails/index.tsx +19 -3
  63. package/themes/original/src/components/AddressForm/index.tsx +61 -39
  64. package/themes/original/src/components/AddressList/index.tsx +25 -24
  65. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  66. package/themes/original/src/components/AnalyticsSegment/index.tsx +193 -10
  67. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  68. package/themes/original/src/components/AppleLogin/styles.tsx +3 -1
  69. package/themes/original/src/components/BusinessBasicInformation/index.tsx +153 -96
  70. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +10 -12
  71. package/themes/original/src/components/BusinessController/index.tsx +80 -66
  72. package/themes/original/src/components/BusinessController/styles.tsx +12 -5
  73. package/themes/original/src/components/BusinessFeaturedController/index.tsx +21 -54
  74. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +8 -0
  75. package/themes/original/src/components/BusinessInformation/index.tsx +139 -85
  76. package/themes/original/src/components/BusinessItemAccordion/index.tsx +15 -20
  77. package/themes/original/src/components/BusinessListingSearch/index.tsx +349 -339
  78. package/themes/original/src/components/BusinessListingSearch/styles.tsx +0 -18
  79. package/themes/original/src/components/BusinessPreorder/index.tsx +103 -19
  80. package/themes/original/src/components/BusinessProductsCategories/index.tsx +1 -2
  81. package/themes/original/src/components/BusinessProductsList/index.tsx +15 -7
  82. package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
  83. package/themes/original/src/components/BusinessProductsListing/UpsellingRedirect.tsx +1 -1
  84. package/themes/original/src/components/BusinessProductsListing/index.tsx +684 -557
  85. package/themes/original/src/components/BusinessProductsListing/styles.tsx +2 -2
  86. package/themes/original/src/components/BusinessReviews/index.tsx +3 -1
  87. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +69 -38
  88. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +0 -1
  89. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  90. package/themes/original/src/components/Cart/index.tsx +76 -79
  91. package/themes/original/src/components/CartContent/index.tsx +117 -20
  92. package/themes/original/src/components/CartContent/styles.tsx +17 -7
  93. package/themes/original/src/components/Checkout/index.tsx +274 -54
  94. package/themes/original/src/components/CitiesControl/index.tsx +1 -1
  95. package/themes/original/src/components/CouponControl/index.tsx +10 -3
  96. package/themes/original/src/components/DriverTips/index.tsx +52 -34
  97. package/themes/original/src/components/FacebookLogin/styles.tsx +3 -1
  98. package/themes/original/src/components/Favorite/index.tsx +2 -6
  99. package/themes/original/src/components/FavoriteList/index.tsx +1 -35
  100. package/themes/original/src/components/FloatingButton/index.tsx +10 -13
  101. package/themes/original/src/components/GPSButton/index.tsx +6 -4
  102. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +7 -3
  103. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +2 -0
  104. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +19 -6
  105. package/themes/original/src/components/GoogleLogin/styles.tsx +1 -1
  106. package/themes/original/src/components/GoogleMap/index.tsx +60 -5
  107. package/themes/original/src/components/Help/index.tsx +2 -2
  108. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +10 -31
  109. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +5 -3
  110. package/themes/original/src/components/HelpGuide/index.tsx +6 -6
  111. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  112. package/themes/original/src/components/HelpOrder/index.tsx +6 -15
  113. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  114. package/themes/original/src/components/Home/index.tsx +13 -4
  115. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  116. package/themes/original/src/components/LoginForm/Otp/index.tsx +91 -25
  117. package/themes/original/src/components/LoginForm/index.tsx +64 -34
  118. package/themes/original/src/components/LottieAnimation/index.tsx +88 -63
  119. package/themes/original/src/components/MessageListing/index.tsx +16 -42
  120. package/themes/original/src/components/Messages/index.tsx +14 -7
  121. package/themes/original/src/components/MomentOption/index.tsx +193 -90
  122. package/themes/original/src/components/MomentSelector/index.tsx +1 -1
  123. package/themes/original/src/components/MultiCart/index.tsx +41 -54
  124. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +162 -50
  125. package/themes/original/src/components/MultiCheckout/index.tsx +329 -100
  126. package/themes/original/src/components/MultiCheckout/styles.tsx +3 -1
  127. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  128. package/themes/original/src/components/MultiOrdersDetails/index.tsx +54 -21
  129. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  130. package/themes/original/src/components/MyOrders/index.tsx +40 -29
  131. package/themes/original/src/components/NavBar/index.tsx +20 -17
  132. package/themes/original/src/components/NotFoundSource/index.tsx +14 -10
  133. package/themes/original/src/components/Notifications/index.tsx +42 -52
  134. package/themes/original/src/components/Notifications/styles.tsx +6 -3
  135. package/themes/original/src/components/OrderDetails/OrderEta.tsx +76 -0
  136. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +21 -5
  137. package/themes/original/src/components/OrderDetails/index.tsx +28 -233
  138. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  139. package/themes/original/src/components/OrderItAgain/index.tsx +3 -1
  140. package/themes/original/src/components/OrderProgress/index.tsx +30 -56
  141. package/themes/original/src/components/OrderSummary/index.tsx +83 -57
  142. package/themes/original/src/components/OrderTypeSelector/index.tsx +2 -1
  143. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +14 -14
  144. package/themes/original/src/components/OrdersOption/index.tsx +67 -85
  145. package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
  146. package/themes/original/src/components/PageBanner/index.tsx +98 -38
  147. package/themes/original/src/components/PageBanner/styles.tsx +0 -10
  148. package/themes/original/src/components/PaymentOptionCard/index.tsx +180 -0
  149. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  150. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  151. package/themes/original/src/components/PaymentOptions/index.tsx +77 -34
  152. package/themes/original/src/components/PhoneInputNumber/index.tsx +18 -4
  153. package/themes/original/src/components/ProductForm/index.tsx +104 -29
  154. package/themes/original/src/components/ProductForm/styles.tsx +5 -5
  155. package/themes/original/src/components/ProductItemAccordion/index.tsx +8 -6
  156. package/themes/original/src/components/ProductOptionSubOption/index.tsx +20 -18
  157. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +5 -9
  158. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  159. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -50
  160. package/themes/original/src/components/ProfessionalProfile/index.tsx +36 -7
  161. package/themes/original/src/components/Promotions/index.tsx +2 -2
  162. package/themes/original/src/components/Promotions/styles.tsx +3 -1
  163. package/themes/original/src/components/ReviewProducts/index.tsx +16 -7
  164. package/themes/original/src/components/ScheduleAccordion/index.tsx +3 -3
  165. package/themes/original/src/components/ServiceForm/index.tsx +63 -20
  166. package/themes/original/src/components/Sessions/index.tsx +11 -8
  167. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  168. package/themes/original/src/components/SignupForm/index.tsx +43 -27
  169. package/themes/original/src/components/SingleOrderCard/index.tsx +102 -63
  170. package/themes/original/src/components/SingleOrderCard/styles.tsx +1 -1
  171. package/themes/original/src/components/SingleProductCard/index.tsx +72 -31
  172. package/themes/original/src/components/SingleProductCard/styles.tsx +20 -4
  173. package/themes/original/src/components/SingleProductReview/styles.tsx +1 -1
  174. package/themes/original/src/components/StripeCardsList/index.tsx +49 -5
  175. package/themes/original/src/components/StripeElementsForm/index.tsx +48 -34
  176. package/themes/original/src/components/StripeElementsForm/naked.tsx +12 -1
  177. package/themes/original/src/components/UpsellingProducts/index.tsx +238 -224
  178. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  179. package/themes/original/src/components/UserDetails/index.tsx +3 -1
  180. package/themes/original/src/components/UserFormDetails/index.tsx +76 -7
  181. package/themes/original/src/components/UserFormDetails/styles.tsx +1 -1
  182. package/themes/original/src/components/UserProfile/index.tsx +88 -79
  183. package/themes/original/src/components/UserProfileForm/index.tsx +17 -21
  184. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  185. package/themes/original/src/components/UserVerification/index.tsx +55 -50
  186. package/themes/original/src/components/WalletTransactionItem/index.tsx +2 -2
  187. package/themes/original/src/components/WalletTransactions/index.tsx +3 -3
  188. package/themes/original/src/components/Wallets/index.tsx +56 -33
  189. package/themes/original/src/components/Wallets/styles.tsx +3 -4
  190. package/themes/original/src/components/shared/OButton.tsx +6 -2
  191. package/themes/original/src/components/shared/OInput.tsx +6 -1
  192. package/themes/original/src/components/shared/OModal.tsx +3 -3
  193. package/themes/original/src/types/index.tsx +38 -10
  194. package/themes/original/src/utils/index.tsx +273 -1
  195. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
  196. package/src/navigators/BottomNavigator.tsx +0 -117
  197. package/src/navigators/CheckoutNavigator.tsx +0 -66
  198. package/src/navigators/HomeNavigator.tsx +0 -202
  199. package/src/navigators/NavigationRef.tsx +0 -7
  200. package/src/navigators/RootNavigator.tsx +0 -269
  201. package/src/pages/Account.tsx +0 -34
  202. package/src/pages/AddressForm.tsx +0 -62
  203. package/src/pages/AddressList.tsx +0 -24
  204. package/src/pages/BusinessProductsList.tsx +0 -81
  205. package/src/pages/BusinessesListing.tsx +0 -43
  206. package/src/pages/CartList.tsx +0 -49
  207. package/src/pages/Checkout.tsx +0 -101
  208. package/src/pages/ForgotPassword.tsx +0 -24
  209. package/src/pages/Help.tsx +0 -23
  210. package/src/pages/HelpAccountAndPayment.tsx +0 -23
  211. package/src/pages/HelpGuide.tsx +0 -23
  212. package/src/pages/HelpOrder.tsx +0 -23
  213. package/src/pages/Home.tsx +0 -36
  214. package/src/pages/IntroductoryTutorial.tsx +0 -170
  215. package/src/pages/Login.tsx +0 -47
  216. package/src/pages/MomentOption.tsx +0 -30
  217. package/src/pages/MultiCheckout.tsx +0 -31
  218. package/src/pages/MultiOrdersDetails.tsx +0 -27
  219. package/src/pages/MyOrders.tsx +0 -40
  220. package/src/pages/NetworkError.tsx +0 -24
  221. package/src/pages/NotFound.tsx +0 -22
  222. package/src/pages/OrderDetails.tsx +0 -25
  223. package/src/pages/ProductDetails.tsx +0 -55
  224. package/src/pages/Profile.tsx +0 -36
  225. package/src/pages/ReviewDriver.tsx +0 -30
  226. package/src/pages/ReviewOrder.tsx +0 -32
  227. package/src/pages/ReviewProducts.tsx +0 -30
  228. package/src/pages/Sessions.tsx +0 -22
  229. package/src/pages/Signup.tsx +0 -53
  230. package/src/pages/SpinnerLoader.tsx +0 -10
  231. package/src/pages/Splash.tsx +0 -21
@@ -11,13 +11,13 @@ import {
11
11
  } from 'ordering-components/native';
12
12
  import { useTheme } from 'styled-components/native';
13
13
  import { SingleProductCardParams } from '../../types';
14
- import { CardInfo, SoldOut, QuantityContainer, PricesContainer, RibbonBox, LogoWrapper } from './styles';
15
- import { StyleSheet, View } from 'react-native';
14
+ import { CardInfo, SoldOut, QuantityContainer, PricesContainer, RibbonBox, LogoWrapper, TagsContainer } from './styles';
15
+ import { ScrollView, StyleSheet, TouchableWithoutFeedback, View } from 'react-native';
16
16
  import { InView } from 'react-native-intersection-observer'
17
17
  import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
18
18
  import { OButton, OIcon, OText } from '../shared';
19
19
  import FastImage from 'react-native-fast-image'
20
- import { shape } from '../../utils';
20
+ import { lightenDarkenColor, shape } from '../../utils';
21
21
  import { LottieAnimation } from '../LottieAnimation';
22
22
  import { CardAnimation } from '../shared/CardAnimation'
23
23
 
@@ -39,14 +39,20 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
39
39
  enableIntersection,
40
40
  navigation,
41
41
  businessId,
42
- isPreviously
42
+ isPreviously,
43
+ viewString,
44
+ businessSingleId
43
45
  } = props;
44
46
 
45
47
  const theme = useTheme();
46
48
  const hideAddButton = theme?.business_view?.components?.products?.components?.add_to_cart_button?.hidden ?? true
47
- const isChewLayout = theme?.header?.components?.layout?.type === 'chew'
48
-
49
+ const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
50
+ const hideProductDescription = theme?.business_view?.components?.products?.components?.product?.components?.description?.hidden
51
+ const hideProductLogo = viewString
52
+ ? theme?.[viewString]?.components?.cart?.components?.products?.image?.hidden
53
+ : theme?.business_view?.components?.products?.components?.product?.components?.image?.hidden
49
54
  const textSize = isChewLayout ? 12 : 10
55
+ const logoPosition = theme?.business_view?.components?.products?.components?.product?.components?.image?.position
50
56
 
51
57
  const styles = StyleSheet.create({
52
58
  container: {
@@ -99,7 +105,12 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
99
105
  color: '#808080',
100
106
  textDecorationLine: 'line-through',
101
107
  marginLeft: 7,
102
- marginRight: 7
108
+ marginRight: 0
109
+ },
110
+ productTagsStyle: {
111
+ width: 30,
112
+ height: 30,
113
+ marginRight: 5
103
114
  }
104
115
  });
105
116
 
@@ -158,7 +169,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
158
169
  }
159
170
 
160
171
  return (
161
- <InView style={{ minHeight: hideAddButton ? 125 : 190 }} triggerOnce={true} onChange={(inView: boolean) => handleChangeIntersection()}>
172
+ <InView style={{ minHeight: hideAddButton ? 125 : 190, marginLeft: logoPosition === 'left' ? 12.5 : 0 }} triggerOnce={true} onChange={(inView: boolean) => handleChangeIntersection()}>
162
173
  {isIntersectionObserver ? (
163
174
  <CardAnimation
164
175
  onClick={() => handleClickproduct()}
@@ -168,10 +179,10 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
168
179
  (style && { ...style })
169
180
  ]}
170
181
  >
171
- <View style={{ flexDirection: 'row' }}>
182
+ <View style={{ flexDirection: logoPosition === 'left' ? 'row-reverse' : 'row' }}>
172
183
  {productAddedToCartLength > 0 && (
173
- <QuantityContainer style={[styles.quantityContainer, {
174
- transform: [{ translateX: 25 }, { translateY: -25 }],
184
+ <QuantityContainer businessSingleId={businessSingleId} style={[styles.quantityContainer, {
185
+ transform: [{ translateX: logoPosition === 'right' ? 25 : -25 }, { translateY: -25 }],
175
186
  }]}>
176
187
  <OText size={12} color={theme.colors.white}>{productAddedToCartLength.toString()}</OText>
177
188
  </QuantityContainer>
@@ -190,8 +201,8 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
190
201
  <LottieAnimation
191
202
  type='favorite'
192
203
  onClick={handleChangeFavorite}
193
- initialValue={product?.favorite ? 0.75 : 0}
194
- toValue={product?.favorite ? 0 : 0.75}
204
+ initialValue={product?.favorite ? 0.5 : 0}
205
+ toValue={product?.favorite ? 0 : 0.5}
195
206
  disableAnimation={!auth}
196
207
  iconProps={{ color: theme.colors.danger5, size: 18 }}
197
208
  isActive={product?.favorite}
@@ -205,15 +216,41 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
205
216
  {product?.offer_price !== null && !!product?.in_offer && (
206
217
  <OText style={styles.regularPriceStyle}>{product?.offer_price ? parsePrice(product?.offer_price) : ''}</OText>
207
218
  )}
219
+ {!isPreviously && product?.tags && product?.tags.length > 0 && (
220
+ <ScrollView
221
+ showsVerticalScrollIndicator={false}
222
+ showsHorizontalScrollIndicator={false}
223
+ horizontal
224
+ style={{ marginLeft: 10 }}
225
+ contentContainerStyle={{ flexGrow: 1 }}
226
+ >
227
+ {product?.tags.map((tag: any, i: any) => (
228
+ <TouchableWithoutFeedback key={i}>
229
+ <TagsContainer>
230
+ <FastImage
231
+ style={styles.productTagsStyle}
232
+ source={tag.image ? {
233
+ uri: optimizeImage(tag.image, 'h_250,c_limit'),
234
+ priority: FastImage.priority.normal,
235
+ } : theme?.images?.dummies?.product}
236
+ resizeMode={FastImage.resizeMode.cover}
237
+ />
238
+ </TagsContainer>
239
+ </TouchableWithoutFeedback>
240
+ ))}
241
+ </ScrollView>
242
+ )}
208
243
  </PricesContainer>
209
- <OText
210
- size={textSize}
211
- numberOfLines={!isPreviously ? 2 : 1}
212
- ellipsizeMode="tail"
213
- color={theme.colors.textSecondary}
214
- style={styles.line15}>
215
- {product?.description}
216
- </OText>
244
+ {!hideProductDescription && (
245
+ <OText
246
+ size={textSize}
247
+ numberOfLines={!isPreviously ? 2 : 1}
248
+ ellipsizeMode="tail"
249
+ color={theme.colors.textSecondary}
250
+ style={styles.line15}>
251
+ {product?.description}
252
+ </OText>
253
+ )}
217
254
  {isPreviously && (
218
255
  <OText
219
256
  size={textSize}
@@ -225,17 +262,19 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
225
262
  </OText>
226
263
  )}
227
264
  </CardInfo>
228
- <LogoWrapper>
265
+ <LogoWrapper logoPosition={logoPosition}>
229
266
  {!!product?.ribbon?.enabled && (
230
267
  <RibbonBox
231
268
  bgColor={product?.ribbon?.color}
269
+ colorText={lightenDarkenColor(product?.ribbon?.color)}
270
+ borderRibbon={lightenDarkenColor(product?.ribbon?.color)}
232
271
  isRoundRect={product?.ribbon?.shape === shape?.rectangleRound}
233
272
  isCapsule={product?.ribbon?.shape === shape?.capsuleShape}
234
273
  >
235
274
  <OText
236
275
  size={textSize}
237
276
  weight={'400'}
238
- color={theme.colors.white}
277
+ color={lightenDarkenColor(product?.ribbon?.color) ? theme.colors.black : theme.colors.white}
239
278
  numberOfLines={2}
240
279
  ellipsizeMode='tail'
241
280
  lineHeight={13}
@@ -244,14 +283,16 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
244
283
  </OText>
245
284
  </RibbonBox>
246
285
  )}
247
- <FastImage
248
- style={styles.productStyle}
249
- source={product?.images ? {
250
- uri: optimizeImage(product?.images, 'h_250,c_limit'),
251
- priority: FastImage.priority.normal,
252
- } : theme?.images?.dummies?.product}
253
- resizeMode={FastImage.resizeMode.cover}
254
- />
286
+ {!hideProductLogo && (
287
+ <FastImage
288
+ style={styles.productStyle}
289
+ source={product?.images ? {
290
+ uri: optimizeImage(product?.images, 'h_250,c_limit'),
291
+ priority: FastImage.priority.normal,
292
+ } : theme?.images?.dummies?.product}
293
+ resizeMode={FastImage.resizeMode.cover}
294
+ />
295
+ )}
255
296
  </LogoWrapper>
256
297
 
257
298
  {(isSoldOut || maxProductQuantity <= 0) && (
@@ -27,7 +27,18 @@ export const PricesContainer = styled.View`
27
27
 
28
28
  export const LogoWrapper = styled.View`
29
29
  position: relative;
30
- margin-left: 12px;
30
+ margin-left: ${(props) => !props.logoPosition || props.logoPosition === 'right' ? '12px' : '0px'};
31
+ margin-right: ${(props) => props.logoPosition === 'right' ? '0px' : '12px'};
32
+ `
33
+ export const WrapTags = styled.View`
34
+ display: flex;
35
+ flex-direction: row;
36
+ justify-content: flex-start;
37
+ margin-left: 10px;
38
+ `
39
+ export const TagsContainer = styled.View`
40
+ display: flex;
41
+ margin: auto;
31
42
  `
32
43
 
33
44
  export const RibbonBox = styled.View`
@@ -38,16 +49,21 @@ export const RibbonBox = styled.View`
38
49
  background-color: ${(props: any) => props.theme.colors.primary};
39
50
  padding: 1px 8px;
40
51
  max-width: 60px;
41
-
42
52
  ${(props: any) => props.bgColor && css`
43
53
  background-color: ${props.bgColor};
44
54
  `}
45
-
46
55
  ${(props: any) => props.isRoundRect && css`
47
56
  border-radius: 7.6px;
48
57
  `}
49
-
50
58
  ${(props: any) => props.isCapsule && css`
51
59
  border-radius: 50px;
52
60
  `}
61
+
62
+ ${(props: any) => props.colorText && css`
63
+ color: ${props.colorText ? 'black' : 'white'};
64
+ `}
65
+
66
+ ${(props: any) => props.borderRibbon && css`
67
+ border: 1px solid ${props.borderRibbon ? 'black' : 'white'};
68
+ `}
53
69
  `
@@ -19,7 +19,7 @@ export const LogoWrapper = styled.View`
19
19
  shadowRadius: 3;
20
20
  shadowOffset: { width: 1, height: 4 };
21
21
  elevation: 3;
22
- borderRadius: 8;
22
+ border-radius: 8;
23
23
  shadowOpacity: 0.1;
24
24
  overflow: hidden;
25
25
  width: 80;
@@ -1,5 +1,5 @@
1
- import React from 'react';
2
- import { View, StyleSheet, ScrollView } from 'react-native';
1
+ import React, { useEffect } from 'react';
2
+ import { View, StyleSheet, ScrollView, Platform } from 'react-native';
3
3
  import {
4
4
  PaymentOptionStripe,
5
5
  useSession,
@@ -8,7 +8,7 @@ import {
8
8
  import { PlaceholderLine } from 'rn-placeholder';
9
9
  import { useTheme } from 'styled-components/native';
10
10
  import { getIconCard } from '../../utils';
11
- import { OAlert, OIcon, OText } from '../shared';
11
+ import { OAlert, OIcon, OText, OModal } from '../shared';
12
12
 
13
13
  import { NotFoundSource } from '../NotFoundSource';
14
14
 
@@ -17,14 +17,23 @@ import {
17
17
  OSItemContent,
18
18
  OSItemActions,
19
19
  } from '../PaymentOptionStripe/styles';
20
+ import { StripeElementsForm } from '../StripeElementsForm';
20
21
 
21
- const StripeCardsListUI = (props: any) => {
22
+ import { KeyboardAvoidingView } from 'react-native';
23
+
24
+ export const StripeCardsListUI = (props: any) => {
22
25
  const {
23
26
  onSelectCard,
24
27
  deleteCard,
25
28
  cardSelected,
26
29
  cardsList,
27
30
  handleCardClick,
31
+ setAddCardOpen,
32
+ gateway,
33
+ setCardsList,
34
+ addCardOpen,
35
+ isOpenMethod,
36
+ handlePaymethodDataChange
28
37
  } = props;
29
38
 
30
39
  const theme = useTheme();
@@ -32,11 +41,19 @@ const StripeCardsListUI = (props: any) => {
32
41
  const [{ token }] = useSession();
33
42
  const [, t] = useLanguage();
34
43
 
44
+ const paymethodsWithoutSaveCards = ['credomatic']
45
+
35
46
  const handleCardSelected = (card: any) => {
36
47
  handleCardClick(card);
37
48
  onSelectCard(card);
38
49
  }
39
50
 
51
+ useEffect(() => {
52
+ if (!cardsList?.loading && cardsList?.cards?.length === 0 && !paymethodsWithoutSaveCards.includes(gateway)) {
53
+ setAddCardOpen({ ...addCardOpen, stripe: true })
54
+ }
55
+ }, [cardsList?.loading])
56
+
40
57
  return (
41
58
  <>
42
59
  {token && !cardsList.loading && cardsList.cards && cardsList.cards.length === 0 && (
@@ -118,6 +135,33 @@ const StripeCardsListUI = (props: any) => {
118
135
  ))}
119
136
  </ScrollView>
120
137
  )}
138
+ <OModal
139
+ entireModal
140
+ title={t('ADD_CREDIT_OR_DEBIT_CARD', 'Add credit or debit card')}
141
+ open={addCardOpen.stripe}
142
+ onClose={() => setAddCardOpen({ ...addCardOpen, stripe: false })}
143
+ style={{ backgroundColor: 'red' }}
144
+ >
145
+ <KeyboardAvoidingView
146
+ behavior={Platform.OS == 'ios' ? 'padding' : 'height'}
147
+ keyboardVerticalOffset={Platform.OS == 'ios' ? 0 : 0}
148
+ enabled={Platform.OS === 'ios' ? true : false}
149
+ >
150
+ <StripeElementsForm
151
+ openCarts={props.openCarts}
152
+ toSave
153
+ businessId={props.businessId}
154
+ businessIds={props.businessIds}
155
+ publicKey={props.publicKey || isOpenMethod?.paymethod?.credentials?.publishable}
156
+ setCardsList={setCardsList}
157
+ cardsList={cardsList}
158
+ requirements={props.clientSecret}
159
+ handleCardClick={handleCardClick}
160
+ onSelectCard={handlePaymethodDataChange}
161
+ onCancel={() => setAddCardOpen({ ...addCardOpen, stripe: false })}
162
+ />
163
+ </KeyboardAvoidingView>
164
+ </OModal>
121
165
  </>
122
166
  )
123
167
  }
@@ -128,7 +172,7 @@ const styles = StyleSheet.create({
128
172
  },
129
173
  cardsList: {
130
174
  width: '100%',
131
- maxHeight: 130
175
+ maxHeight: 150
132
176
  },
133
177
  })
134
178
 
@@ -1,6 +1,6 @@
1
1
  import React, { useState, useEffect } from 'react';
2
- import { View, StyleSheet, useWindowDimensions, Keyboard } from 'react-native';
3
- import { useLanguage, useSession, useConfig } from 'ordering-components/native';
2
+ import { View, StyleSheet, useWindowDimensions, Keyboard, Platform } from 'react-native';
3
+ import { useLanguage, useSession, useConfig, useValidationFields } from 'ordering-components/native';
4
4
  import {
5
5
  StripeProvider,
6
6
  CardField,
@@ -28,7 +28,12 @@ const StripeElementsFormUI = (props: any) => {
28
28
  onCancel,
29
29
  cart,
30
30
  merchantId,
31
- businessIds
31
+ businessIds,
32
+ setMethodPaySupported,
33
+ placeByMethodPay,
34
+ methodPaySupported,
35
+ setPlaceByMethodPay,
36
+ cartTotal
32
37
  } = props;
33
38
 
34
39
  const theme = useTheme();
@@ -36,6 +41,7 @@ const StripeElementsFormUI = (props: any) => {
36
41
  const [, t] = useLanguage();
37
42
  const [{ user }] = useSession();
38
43
  const [{ configs }] = useConfig();
44
+ const [validationFields] = useValidationFields()
39
45
  const [card, setCard] = useState<any>(null);
40
46
  const [isCompleted, setIsCompleted] = useState(false);
41
47
  const [errors, setErrors] = useState('')
@@ -44,6 +50,23 @@ const StripeElementsFormUI = (props: any) => {
44
50
  const { height } = useWindowDimensions();
45
51
  const { top, bottom } = useSafeAreaInsets();
46
52
  const [isKeyboardShow, setIsKeyboardShow] = useState(false);
53
+ const zipCodeEnabled = validationFields?.fields?.card?.zipcode?.enabled
54
+ const zipCodeRequired = validationFields?.fields?.card?.zipcode?.required
55
+ const styles = StyleSheet.create({
56
+ container: {
57
+ width: '100%',
58
+ paddingHorizontal: 40,
59
+ justifyContent: 'space-between',
60
+ paddingBottom: 12
61
+ },
62
+ btnAddStyle: {
63
+ marginTop: 20,
64
+ borderRadius: 7.6,
65
+ shadowOpacity: 0,
66
+ height: 44,
67
+ marginBottom: isKeyboardShow && Platform.OS === 'ios' ? 40 : 0
68
+ },
69
+ })
47
70
 
48
71
  let billingDetails: any = {}
49
72
 
@@ -62,24 +85,24 @@ const StripeElementsFormUI = (props: any) => {
62
85
 
63
86
  if (user?.address) {
64
87
  billingDetails.address = {
65
- line1: user?.address
66
- }
88
+ line1: user?.address
89
+ }
67
90
  }
68
91
 
69
92
  const createPayMethod = async () => {
70
93
  const params: any = { paymentMethodType: 'Card', paymentMethodData: {} }
71
94
  if (Object.keys(billingDetails).length > 0) {
72
- params.paymentMethodData.billingDetails = {...billingDetails, token: card?.last4}
95
+ params.paymentMethodData.billingDetails = { ...billingDetails, token: card?.last4 }
73
96
  }
74
97
  try {
75
98
  setCreatePmLoading(true)
76
99
  const { paymentMethod, error } = await createPaymentMethod(params);
77
100
 
78
- if (error) {
79
- setErrors(error?.message);
80
- setCreatePmLoading(false)
81
- return
82
- }
101
+ if (error) {
102
+ setErrors(error?.message);
103
+ setCreatePmLoading(false)
104
+ return
105
+ }
83
106
 
84
107
  setCreatePmLoading(false)
85
108
  handleSource && handleSource({
@@ -102,7 +125,7 @@ const StripeElementsFormUI = (props: any) => {
102
125
  setErrors(error?.message || error?.toString());
103
126
  }
104
127
  }
105
-
128
+
106
129
  const handleSaveCard = async () => {
107
130
  setErrors('');
108
131
  if (!requirements) {
@@ -111,7 +134,7 @@ const StripeElementsFormUI = (props: any) => {
111
134
  }
112
135
  const params: any = { paymentMethodType: 'Card', paymentMethodData: {} }
113
136
  if (Object.keys(billingDetails).length > 0) {
114
- params.paymentMethodData.billingDetails = {...billingDetails, token: card?.last4}
137
+ params.paymentMethodData.billingDetails = { ...billingDetails, token: card?.last4 }
115
138
  }
116
139
  try {
117
140
  const { setupIntent, error } = await confirmSetupIntent(requirements, params);
@@ -119,8 +142,8 @@ const StripeElementsFormUI = (props: any) => {
119
142
  if (setupIntent?.status === 'Succeeded') {
120
143
  if (businessIds) {
121
144
  businessIds.forEach((_businessId: any, index: any) => {
122
- const _isNewCard = index === 0
123
- stripeTokenHandler(setupIntent?.paymentMethodId, user, businessId, _isNewCard);
145
+ const _isNewCard = index === 0
146
+ stripeTokenHandler(setupIntent?.paymentMethodId, user, businessId, _isNewCard);
124
147
  })
125
148
  } else {
126
149
  stripeTokenHandler(setupIntent?.paymentMethodId, user, businessId);
@@ -145,7 +168,8 @@ const StripeElementsFormUI = (props: any) => {
145
168
  !!card?.last4 &&
146
169
  !!card?.expiryMonth &&
147
170
  !!card?.expiryYear &&
148
- !!card?.brand
171
+ !!card?.brand &&
172
+ ((!zipCodeEnabled || !zipCodeRequired || !!card?.postalCode))
149
173
  )
150
174
  }
151
175
  }, [card])
@@ -172,12 +196,12 @@ const StripeElementsFormUI = (props: any) => {
172
196
  }, []);
173
197
 
174
198
  return (
175
- <View style={{ ...styles.container, height: height - top - bottom - 60 - (isKeyboardShow ? 250 : 0) }}>
199
+ <View style={{ ...styles.container, height: methodsPay?.includes(paymethod) ? 'auto' : height - top - bottom - 60 - (isKeyboardShow ? 250 : 0) }}>
176
200
  {publicKey ? (
177
201
  <View style={{ flex: 1 }}>
178
202
  <StripeProvider
179
203
  publishableKey={publicKey}
180
- merchantIdentifier={`merchant.${merchantId}`}
204
+ merchantIdentifier={merchantId}
181
205
  urlScheme={merchantId}
182
206
  >
183
207
  {methodsPay?.includes(paymethod) ? (
@@ -185,13 +209,18 @@ const StripeElementsFormUI = (props: any) => {
185
209
  handleSource={handleSource}
186
210
  onCancel={onCancel}
187
211
  cart={cart}
212
+ cartTotal={cartTotal}
188
213
  setErrors={setErrors}
189
214
  paymethod={paymethod}
190
215
  devMode={publicKey?.includes('test')}
216
+ setMethodPaySupported={setMethodPaySupported}
217
+ placeByMethodPay={placeByMethodPay}
218
+ methodPaySupported={methodPaySupported}
219
+ setPlaceByMethodPay={setPlaceByMethodPay}
191
220
  />
192
221
  ) : (
193
222
  <CardField
194
- postalCodeEnabled={true}
223
+ postalCodeEnabled={zipCodeEnabled}
195
224
  cardStyle={{
196
225
  backgroundColor: '#FFFFFF',
197
226
  textColor: '#000000',
@@ -249,21 +278,6 @@ const StripeElementsFormUI = (props: any) => {
249
278
  )
250
279
  }
251
280
 
252
- const styles = StyleSheet.create({
253
- container: {
254
- width: '100%',
255
- paddingHorizontal: 40,
256
- justifyContent: 'space-between',
257
- paddingBottom: 12
258
- },
259
- btnAddStyle: {
260
- marginTop: 20,
261
- borderRadius: 7.6,
262
- shadowOpacity: 0,
263
- height: 44
264
- },
265
- })
266
-
267
281
  export const StripeElementsForm = (props: any) => {
268
282
  const stripeProps = {
269
283
  ...props,
@@ -4,7 +4,10 @@ import { useApi, useSession } from 'ordering-components/native';
4
4
  export const StripeElementsForm = (props: any) => {
5
5
  const {
6
6
  UIComponent,
7
- toSave
7
+ toSave,
8
+ setCardsList,
9
+ cardsList,
10
+ handleCardClick
8
11
  } = props;
9
12
 
10
13
  const [ordering] = useApi();
@@ -61,6 +64,14 @@ export const StripeElementsForm = (props: any) => {
61
64
  })
62
65
  const response = await result.json();
63
66
  isNewCard && props.onSelectCard && props.onSelectCard(response.result);
67
+ setCardsList && setCardsList({
68
+ ...cardsList,
69
+ cards: [
70
+ ...cardsList.cards,
71
+ response.result
72
+ ]
73
+ })
74
+ handleCardClick(response.result)
64
75
  setState({
65
76
  ...state,
66
77
  loadingAdd: false