ordering-ui-react-native 0.16.72 → 0.16.73-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 (216) hide show
  1. package/package.json +6 -5
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/ActiveOrders/styles.tsx +8 -14
  4. package/src/components/BusinessInformation/index.tsx +19 -4
  5. package/src/components/BusinessInformation/styles.tsx +2 -2
  6. package/src/components/BusinessProductsList/index.tsx +10 -10
  7. package/src/components/BusinessesListing/index.tsx +1 -1
  8. package/src/components/Checkout/index.tsx +2 -1
  9. package/src/components/LanguageSelector/index.tsx +21 -16
  10. package/src/components/Messages/index.tsx +2 -2
  11. package/src/components/OrderCreating/index.tsx +2 -2
  12. package/src/components/OrdersOption/index.tsx +54 -56
  13. package/src/components/PaymentOptions/index.tsx +298 -345
  14. package/src/components/PaymentOptionsWebView/index.tsx +119 -120
  15. package/src/components/SingleProductReview/index.tsx +7 -4
  16. package/src/components/StripeElementsForm/index.tsx +25 -16
  17. package/src/components/VerifyPhone/styles.tsx +1 -2
  18. package/src/components/shared/OToast.tsx +4 -4
  19. package/src/types/@fatnlazycat/react-native-recaptcha-v3/index.d.ts +1 -0
  20. package/src/utils/index.tsx +2 -1
  21. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +260 -238
  22. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  23. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  24. package/themes/business/src/components/Chat/index.tsx +31 -31
  25. package/themes/business/src/components/DriverMap/index.tsx +7 -5
  26. package/themes/business/src/components/LoginForm/Otp/index.tsx +120 -0
  27. package/themes/business/src/components/LoginForm/Otp/styles.tsx +7 -0
  28. package/themes/business/src/components/LoginForm/index.tsx +332 -140
  29. package/themes/business/src/components/LoginForm/styles.tsx +10 -0
  30. package/themes/business/src/components/MapView/index.tsx +14 -3
  31. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  32. package/themes/business/src/components/NewOrderNotification/index.tsx +31 -41
  33. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +70 -43
  34. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +3 -3
  35. package/themes/business/src/components/OrdersOption/index.tsx +63 -73
  36. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  37. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  38. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  39. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  40. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  41. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  42. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  43. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  44. package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
  45. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  46. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  47. package/themes/business/src/components/PreviousOrders/index.tsx +440 -245
  48. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  49. package/themes/business/src/components/ProductItemAccordion/index.tsx +24 -5
  50. package/themes/business/src/components/ReviewCustomer/index.tsx +39 -15
  51. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  52. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  53. package/themes/business/src/components/shared/OLink.tsx +33 -13
  54. package/themes/business/src/components/shared/OText.tsx +8 -2
  55. package/themes/business/src/types/index.tsx +29 -3
  56. package/themes/business/src/utils/index.tsx +26 -0
  57. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  58. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  59. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  60. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  61. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  62. package/themes/kiosk/src/components/LoginForm/Otp/index.tsx +92 -0
  63. package/themes/kiosk/src/components/LoginForm/Otp/styles.tsx +7 -0
  64. package/themes/kiosk/src/components/LoginForm/index.tsx +545 -112
  65. package/themes/kiosk/src/components/LoginForm/styles.tsx +18 -0
  66. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  67. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  68. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  69. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +1 -0
  70. package/themes/kiosk/src/components/PhoneInputNumber/styles.tsx +1 -3
  71. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  72. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  73. package/themes/kiosk/src/components/shared/OModal.tsx +14 -11
  74. package/themes/kiosk/src/layouts/Container.tsx +7 -1
  75. package/themes/kiosk/src/types/index.d.ts +15 -0
  76. package/themes/kiosk/src/utils/index.tsx +15 -0
  77. package/themes/original/index.tsx +6 -0
  78. package/themes/original/src/components/AddressDetails/index.tsx +10 -8
  79. package/themes/original/src/components/AddressForm/index.tsx +153 -137
  80. package/themes/original/src/components/AddressList/index.tsx +18 -18
  81. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  82. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  83. package/themes/original/src/components/BusinessBasicInformation/index.tsx +47 -22
  84. package/themes/original/src/components/BusinessController/index.tsx +101 -70
  85. package/themes/original/src/components/BusinessController/styles.tsx +14 -9
  86. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  87. package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -6
  88. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  89. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  90. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  91. package/themes/original/src/components/BusinessListingSearch/index.tsx +105 -156
  92. package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
  93. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  94. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  95. package/themes/original/src/components/BusinessProductsList/index.tsx +41 -62
  96. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  97. package/themes/original/src/components/BusinessProductsListing/index.tsx +561 -496
  98. package/themes/original/src/components/BusinessProductsListing/styles.tsx +13 -12
  99. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
  100. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  101. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +83 -92
  102. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  103. package/themes/original/src/components/BusinessesListing/index.tsx +7 -6
  104. package/themes/original/src/components/Cart/index.tsx +76 -42
  105. package/themes/original/src/components/CartContent/index.tsx +80 -18
  106. package/themes/original/src/components/CartContent/styles.tsx +11 -1
  107. package/themes/original/src/components/Checkout/index.tsx +96 -108
  108. package/themes/original/src/components/Checkout/styles.tsx +4 -3
  109. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  110. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  111. package/themes/original/src/components/DriverTips/index.tsx +47 -37
  112. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  113. package/themes/original/src/components/Favorite/index.tsx +7 -4
  114. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  115. package/themes/original/src/components/FavoriteList/index.tsx +70 -80
  116. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  117. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  118. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  119. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  120. package/themes/original/src/components/GoogleMap/index.tsx +10 -1
  121. package/themes/original/src/components/Help/index.tsx +8 -8
  122. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +14 -20
  123. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  124. package/themes/original/src/components/HelpGuide/index.tsx +13 -12
  125. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  126. package/themes/original/src/components/HelpOrder/index.tsx +12 -20
  127. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  128. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  129. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  130. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  131. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  132. package/themes/original/src/components/LoginForm/index.tsx +98 -41
  133. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  134. package/themes/original/src/components/MessageListing/index.tsx +7 -40
  135. package/themes/original/src/components/Messages/index.tsx +42 -26
  136. package/themes/original/src/components/MomentOption/index.tsx +17 -11
  137. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  138. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
  139. package/themes/original/src/components/MultiCheckout/index.tsx +158 -77
  140. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  141. package/themes/original/src/components/MultiOrdersDetails/index.tsx +85 -34
  142. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  143. package/themes/original/src/components/MyOrders/index.tsx +86 -20
  144. package/themes/original/src/components/NavBar/index.tsx +7 -6
  145. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  146. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  147. package/themes/original/src/components/Notifications/index.tsx +144 -0
  148. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  149. package/themes/original/src/components/OrderDetails/index.tsx +108 -218
  150. package/themes/original/src/components/OrderDetails/styles.tsx +10 -1
  151. package/themes/original/src/components/OrderItAgain/index.tsx +46 -43
  152. package/themes/original/src/components/OrderProgress/index.tsx +81 -105
  153. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  154. package/themes/original/src/components/OrderSummary/index.tsx +2 -2
  155. package/themes/original/src/components/OrderTypeSelector/index.tsx +13 -6
  156. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +94 -98
  157. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  158. package/themes/original/src/components/OrdersOption/index.tsx +97 -100
  159. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  160. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  161. package/themes/original/src/components/PaymentOptions/index.tsx +1 -2
  162. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  163. package/themes/original/src/components/PlaceSpot/index.tsx +22 -8
  164. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  165. package/themes/original/src/components/ProductForm/index.tsx +240 -254
  166. package/themes/original/src/components/ProductForm/styles.tsx +5 -8
  167. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  168. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -10
  169. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
  170. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  171. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -49
  172. package/themes/original/src/components/ProfessionalProfile/index.tsx +20 -9
  173. package/themes/original/src/components/Promotions/index.tsx +234 -220
  174. package/themes/original/src/components/Promotions/styles.tsx +7 -2
  175. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  176. package/themes/original/src/components/ReviewOrder/index.tsx +43 -11
  177. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  178. package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
  179. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  180. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  181. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  182. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  183. package/themes/original/src/components/ServiceForm/index.tsx +337 -265
  184. package/themes/original/src/components/Sessions/index.tsx +11 -8
  185. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  186. package/themes/original/src/components/SignupForm/index.tsx +134 -89
  187. package/themes/original/src/components/SingleOrderCard/index.tsx +125 -56
  188. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  189. package/themes/original/src/components/SingleProductCard/index.tsx +133 -91
  190. package/themes/original/src/components/SingleProductCard/styles.tsx +14 -13
  191. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  192. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  193. package/themes/original/src/components/StripeCardsList/index.tsx +1 -1
  194. package/themes/original/src/components/StripeElementsForm/index.tsx +13 -2
  195. package/themes/original/src/components/UpsellingProducts/index.tsx +244 -215
  196. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  197. package/themes/original/src/components/UserDetails/index.tsx +5 -3
  198. package/themes/original/src/components/UserFormDetails/index.tsx +6 -48
  199. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  200. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  201. package/themes/original/src/components/UserProfileForm/index.tsx +21 -28
  202. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  203. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  204. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  205. package/themes/original/src/components/Wallets/index.tsx +177 -164
  206. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  207. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  208. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  209. package/themes/original/src/components/shared/OBottomPopup.tsx +6 -4
  210. package/themes/original/src/components/shared/OButton.tsx +9 -4
  211. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  212. package/themes/original/src/components/shared/OInput.tsx +10 -1
  213. package/themes/original/src/layouts/Container.tsx +13 -9
  214. package/themes/original/src/types/index.tsx +37 -6
  215. package/themes/original/src/utils/index.tsx +317 -58
  216. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,22 +1,25 @@
1
- import React, { useState, useRef, useEffect } from 'react';
1
+ import React, { useState } from 'react';
2
2
  import {
3
3
  useLanguage,
4
4
  useConfig,
5
5
  useOrder,
6
6
  useUtils,
7
7
  useSession,
8
+ ToastType,
9
+ useToast,
8
10
  SingleProductCard as SingleProductCardController
9
11
  } from 'ordering-components/native';
10
12
  import { useTheme } from 'styled-components/native';
11
13
  import { SingleProductCardParams } from '../../types';
12
- import { CardContainer, CardInfo, SoldOut, QuantityContainer, PricesContainer, RibbonBox, LogoWrapper } from './styles';
13
- import { StyleSheet, View, TouchableOpacity, Image, Animated } from 'react-native';
14
+ import { CardInfo, SoldOut, QuantityContainer, PricesContainer, RibbonBox, LogoWrapper, TagsContainer } from './styles';
15
+ import { ScrollView, StyleSheet, TouchableWithoutFeedback, View } from 'react-native';
14
16
  import { InView } from 'react-native-intersection-observer'
15
17
  import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
16
- import { OButton, OText } from '../shared';
18
+ import { OButton, OIcon, OText } from '../shared';
17
19
  import FastImage from 'react-native-fast-image'
18
- import IconAntDesign from 'react-native-vector-icons/AntDesign'
19
20
  import { shape } from '../../utils';
21
+ import { LottieAnimation } from '../LottieAnimation';
22
+ import { CardAnimation } from '../shared/CardAnimation'
20
23
 
21
24
  function SingleProductCardPropsAreEqual(prevProps: any, nextProps: any) {
22
25
  return JSON.stringify(prevProps.product) === JSON.stringify(nextProps.product) &&
@@ -36,21 +39,33 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
36
39
  enableIntersection,
37
40
  navigation,
38
41
  businessId,
39
- isPreviously
42
+ isPreviously,
43
+ viewString
40
44
  } = props;
41
45
 
42
46
  const theme = useTheme();
43
47
  const hideAddButton = theme?.business_view?.components?.products?.components?.add_to_cart_button?.hidden ?? true
44
-
45
- const fadeAnim = useRef(new Animated.Value(0)).current;
48
+ const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
49
+ const hideProductDescription = theme?.business_view?.components?.products?.components?.product?.components?.description?.hidden
50
+ const hideProductLogo = viewString
51
+ ? theme?.[viewString]?.components?.cart?.components?.products?.image?.hidden
52
+ : theme?.business_view?.components?.products?.components?.product?.components?.image?.hidden
53
+ const textSize = isChewLayout ? 12 : 10
54
+ const logoPosition = theme?.business_view?.components?.products?.components?.product?.components?.image?.position
46
55
 
47
56
  const styles = StyleSheet.create({
48
57
  container: {
49
58
  borderWidth: 1,
50
- borderRadius: 7.6,
51
59
  borderColor: theme.colors.border,
52
- marginBottom: 28,
53
- minHeight: 165
60
+ marginBottom: 25,
61
+ minHeight: hideAddButton ? 100 : 165,
62
+ flex: 1,
63
+ flexDirection: hideAddButton ? 'row' : 'column',
64
+ justifyContent: 'space-between',
65
+ alignItems: 'center',
66
+ padding: 12,
67
+ borderRadius: 10,
68
+ position: 'relative'
54
69
  },
55
70
  titleWrapper: {
56
71
  flexDirection: 'row',
@@ -70,14 +85,14 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
70
85
  textTransform: 'uppercase',
71
86
  },
72
87
  productStyle: {
73
- width: 75,
74
- height: 75,
88
+ width: 85,
89
+ height: 85,
75
90
  borderRadius: 7.6
76
91
  },
77
92
  quantityContainer: {
78
93
  position: 'absolute',
79
- left: '100%',
80
- bottom: '100%',
94
+ right: 0,
95
+ top: 0,
81
96
  width: 25,
82
97
  height: 25,
83
98
  textAlign: 'center',
@@ -89,7 +104,12 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
89
104
  color: '#808080',
90
105
  textDecorationLine: 'line-through',
91
106
  marginLeft: 7,
92
- marginRight: 7
107
+ marginRight: 0
108
+ },
109
+ productTagsStyle: {
110
+ width: 30,
111
+ height: 30,
112
+ marginRight: 5
93
113
  }
94
114
  });
95
115
 
@@ -98,6 +118,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
98
118
  const [{ auth }] = useSession()
99
119
  const [{ parsePrice, optimizeImage, parseDate }] = useUtils();
100
120
  const [orderState] = useOrder()
121
+ const [, { showToast }] = useToast()
101
122
  const [isIntersectionObserver, setIsIntersectionObserver] = useState(!enableIntersection)
102
123
 
103
124
  const editMode = typeof product?.code !== 'undefined';
@@ -124,14 +145,6 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
124
145
  maxCartProductInventory,
125
146
  );
126
147
 
127
- const fadeIn = () => {
128
- Animated.timing(fadeAnim, {
129
- toValue: 1,
130
- duration: 500,
131
- useNativeDriver: true
132
- }).start();
133
- };
134
-
135
148
  const handleChangeFavorite = () => {
136
149
  if (auth) {
137
150
  handleFavoriteProduct && handleFavoriteProduct(!product?.favorite)
@@ -141,30 +154,34 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
141
154
  }
142
155
 
143
156
  const handleChangeIntersection = () => {
144
- setIsIntersectionObserver(true);
145
- fadeIn();
157
+ if (enableIntersection) {
158
+ setIsIntersectionObserver(true);
159
+ }
146
160
  }
147
161
 
148
- useEffect(() => {
149
- if (!enableIntersection) fadeIn()
150
- }, [enableIntersection])
162
+ const handleClickproduct = () => {
163
+ if (productAddedToCartLength && product?.maximum_per_order && productAddedToCartLength >= product?.maximum_per_order) {
164
+ showToast(ToastType.Error, t('PRODUCT_ON_MAXIMUM_ORDER', 'The product is on maximum order'))
165
+ return
166
+ }
167
+ onProductClick?.(product)
168
+ }
151
169
 
152
170
  return (
153
- <InView style={{ minHeight: 200 }} triggerOnce={true} onChange={(inView: boolean) => handleChangeIntersection()}>
171
+ <InView style={{ minHeight: hideAddButton ? 125 : 190 }} triggerOnce={true} onChange={(inView: boolean) => handleChangeIntersection()}>
154
172
  {isIntersectionObserver ? (
155
- <CardContainer
156
- showAddButton={!hideAddButton}
173
+ <CardAnimation
174
+ onClick={() => handleClickproduct()}
157
175
  style={[
158
176
  styles.container,
159
177
  (isSoldOut || maxProductQuantity <= 0) && styles.soldOutBackgroundStyle,
160
- (style && { ...style }),
178
+ (style && { ...style })
161
179
  ]}
162
- onPress={() => onProductClick?.(product)}
163
180
  >
164
- <View style={{ flexDirection: 'row' }}>
181
+ <View style={{ flexDirection: logoPosition === 'left' ? 'row-reverse' : 'row' }}>
165
182
  {productAddedToCartLength > 0 && (
166
183
  <QuantityContainer style={[styles.quantityContainer, {
167
- transform: [{ translateX: 10 }, { translateY: -10 }],
184
+ transform: [{ translateX: 25 }, { translateY: -25 }],
168
185
  }]}>
169
186
  <OText size={12} color={theme.colors.white}>{productAddedToCartLength.toString()}</OText>
170
187
  </QuantityContainer>
@@ -172,7 +189,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
172
189
  <CardInfo>
173
190
  <View style={styles.titleWrapper}>
174
191
  <OText
175
- size={12}
192
+ size={textSize + 2}
176
193
  weight={'500'}
177
194
  numberOfLines={1}
178
195
  ellipsizeMode="tail"
@@ -180,34 +197,62 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
180
197
  {product?.name}
181
198
  </OText>
182
199
  {!isPreviously && (
183
- <TouchableOpacity
184
- onPress={handleChangeFavorite}
185
- >
186
- <IconAntDesign
187
- name={product?.favorite ? 'heart' : 'hearto'}
188
- color={theme.colors.danger5}
189
- size={18}
190
- />
191
- </TouchableOpacity>
200
+ <LottieAnimation
201
+ type='favorite'
202
+ onClick={handleChangeFavorite}
203
+ initialValue={product?.favorite ? 0.75 : 0}
204
+ toValue={product?.favorite ? 0 : 0.75}
205
+ disableAnimation={!auth}
206
+ iconProps={{ color: theme.colors.danger5, size: 18 }}
207
+ isActive={product?.favorite}
208
+ />
192
209
  )}
193
210
  </View>
194
211
  <PricesContainer>
195
- <OText color={theme.colors.primary}>{product?.price ? parsePrice(product?.price) : ''}</OText>
196
- {product?.offer_price !== null && product?.in_offer && (
212
+ {!!product?.price && (
213
+ <OText color={theme.colors.primary}>{parsePrice(product?.price)}</OText>
214
+ )}
215
+ {product?.offer_price !== null && !!product?.in_offer && (
197
216
  <OText style={styles.regularPriceStyle}>{product?.offer_price ? parsePrice(product?.offer_price) : ''}</OText>
198
217
  )}
218
+ {!isPreviously && product?.tags && product?.tags.length > 0 && (
219
+ <ScrollView
220
+ showsVerticalScrollIndicator={false}
221
+ showsHorizontalScrollIndicator={false}
222
+ horizontal
223
+ style={{ marginLeft: 10 }}
224
+ contentContainerStyle={{flexGrow: 1}}
225
+ >
226
+ {product?.tags.map((tag: any, i: any) => (
227
+ <TouchableWithoutFeedback key={i}>
228
+ <TagsContainer>
229
+ <FastImage
230
+ style={styles.productTagsStyle}
231
+ source={tag.image ? {
232
+ uri: optimizeImage(tag.image, 'h_250,c_limit'),
233
+ priority: FastImage.priority.normal,
234
+ } : theme?.images?.dummies?.product}
235
+ resizeMode={FastImage.resizeMode.cover}
236
+ />
237
+ </TagsContainer>
238
+ </TouchableWithoutFeedback>
239
+ ))}
240
+ </ScrollView>
241
+ )}
199
242
  </PricesContainer>
200
- <OText
201
- size={10}
202
- numberOfLines={!isPreviously ? 2 : 1}
203
- ellipsizeMode="tail"
204
- color={theme.colors.textSecondary}
205
- style={styles.line15}>
206
- {product?.description}
207
- </OText>
243
+ {!hideProductDescription && (
244
+ <OText
245
+ size={textSize}
246
+ numberOfLines={!isPreviously ? 2 : 1}
247
+ ellipsizeMode="tail"
248
+ color={theme.colors.textSecondary}
249
+ style={styles.line15}>
250
+ {product?.description}
251
+ </OText>
252
+ )}
208
253
  {isPreviously && (
209
254
  <OText
210
- size={10}
255
+ size={textSize}
211
256
  numberOfLines={1}
212
257
  ellipsizeMode="tail"
213
258
  color={theme.colors.primary}
@@ -216,15 +261,15 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
216
261
  </OText>
217
262
  )}
218
263
  </CardInfo>
219
- <LogoWrapper>
220
- {product?.ribbon?.enabled && (
264
+ <LogoWrapper logoPosition={logoPosition}>
265
+ {!!product?.ribbon?.enabled && (
221
266
  <RibbonBox
222
267
  bgColor={product?.ribbon?.color}
223
268
  isRoundRect={product?.ribbon?.shape === shape?.rectangleRound}
224
269
  isCapsule={product?.ribbon?.shape === shape?.capsuleShape}
225
270
  >
226
271
  <OText
227
- size={10}
272
+ size={textSize}
228
273
  weight={'400'}
229
274
  color={theme.colors.white}
230
275
  numberOfLines={2}
@@ -235,24 +280,15 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
235
280
  </OText>
236
281
  </RibbonBox>
237
282
  )}
238
- {product?.images && (
239
- <Animated.View
240
- style={[
241
- {
242
- // Bind opacity to animated value
243
- opacity: fadeAnim
244
- }
245
- ]}
246
- >
247
- <FastImage
248
- style={styles.productStyle}
249
- source={{
250
- uri: optimizeImage(product?.images, 'h_250,c_limit'),
251
- priority: FastImage.priority.normal,
252
- }}
253
- resizeMode={FastImage.resizeMode.cover}
254
- />
255
- </Animated.View>
283
+ {!hideProductLogo && (
284
+ <FastImage
285
+ style={styles.productStyle}
286
+ source={product?.images ? {
287
+ uri: optimizeImage(product?.images, 'h_250,c_limit'),
288
+ priority: FastImage.priority.normal,
289
+ } : theme?.images?.dummies?.product}
290
+ resizeMode={FastImage.resizeMode.cover}
291
+ />
256
292
  )}
257
293
  </LogoWrapper>
258
294
 
@@ -266,11 +302,12 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
266
302
  </View>
267
303
  {!hideAddButton && (
268
304
  <OButton
269
- onClick={() => onProductClick?.(product)}
305
+ onClick={() => handleClickproduct()}
270
306
  style={{
271
307
  width: '100%',
272
308
  borderRadius: 7.6,
273
309
  marginTop: 10,
310
+ height: 40
274
311
 
275
312
  }}
276
313
  bgColor={isSoldOut ? '#B8B8B8' : theme?.colors?.white}
@@ -279,21 +316,26 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
279
316
  text={t('ADD', 'Add')}
280
317
  />
281
318
  )}
282
- </CardContainer>
319
+ </CardAnimation>
283
320
  ) : (
284
- <Placeholder style={{ padding: 5 }} Animation={Fade}>
285
- <View style={{ flexDirection: 'row' }}>
321
+ <View style={{ marginBottom: 28, padding: 12, height: hideAddButton ? 125 : 165 }}>
322
+ <Placeholder style={{ padding: 5 }} Animation={Fade}>
323
+ <View style={{ flexDirection: 'row' }}>
324
+ <Placeholder style={{ paddingVertical: 10, flex: 1 }}>
325
+ <PlaceholderLine width={60} style={{ marginBottom: 15 }} />
326
+ <PlaceholderLine width={20} />
327
+ </Placeholder>
328
+ <PlaceholderLine
329
+ width={24}
330
+ height={70}
331
+ style={{ marginLeft: 10, marginBottom: 10 }}
332
+ />
333
+ </View>
286
334
  <PlaceholderLine
287
- width={24}
288
- height={70}
289
- style={{ marginRight: 10, marginBottom: 10 }}
335
+ height={52}
290
336
  />
291
- <Placeholder style={{ paddingVertical: 10 }}>
292
- <PlaceholderLine width={60} style={{ marginBottom: 25 }} />
293
- <PlaceholderLine width={20} />
294
- </Placeholder>
295
- </View>
296
- </Placeholder>
337
+ </Placeholder>
338
+ </View>
297
339
  )}
298
340
  </InView>
299
341
  );
@@ -1,17 +1,9 @@
1
1
  import styled, { css } from 'styled-components/native'
2
2
 
3
- export const CardContainer = styled.TouchableOpacity`
4
- flex: 1;
5
- flex-direction: ${(props : any) => props.showAddButton ? 'column' : 'row'};
6
- justify-content: space-between;
7
- align-items: center;
8
- padding: 12px;
9
- border-radius: 10px;
10
- position: relative;
11
- `
12
3
  export const CardInfo = styled.View`
13
4
  padding-start: 3px;
14
5
  flex: 1;
6
+ min-height: 85px;
15
7
  `
16
8
  export const SoldOut = styled.View`
17
9
  position: absolute;
@@ -30,11 +22,23 @@ export const QuantityContainer = styled.View`
30
22
  export const PricesContainer = styled.View`
31
23
  flex-direction: row;
32
24
  align-items: center;
25
+ margin-vertical: 6px;
33
26
  `
34
27
 
35
28
  export const LogoWrapper = styled.View`
36
29
  position: relative;
37
- 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;
38
42
  `
39
43
 
40
44
  export const RibbonBox = styled.View`
@@ -45,15 +49,12 @@ export const RibbonBox = styled.View`
45
49
  background-color: ${(props: any) => props.theme.colors.primary};
46
50
  padding: 1px 8px;
47
51
  max-width: 60px;
48
-
49
52
  ${(props: any) => props.bgColor && css`
50
53
  background-color: ${props.bgColor};
51
54
  `}
52
-
53
55
  ${(props: any) => props.isRoundRect && css`
54
56
  border-radius: 7.6px;
55
57
  `}
56
-
57
58
  ${(props: any) => props.isCapsule && css`
58
59
  border-radius: 50px;
59
60
  `}
@@ -1,6 +1,6 @@
1
1
  import React, { useState, useEffect } from 'react'
2
- import { useLanguage } from 'ordering-components/native'
3
- import { OText, OButton, OInput } from '../shared'
2
+ import { useLanguage, useUtils } from 'ordering-components/native'
3
+ import { OText, OButton, OInput, OIcon } from '../shared'
4
4
  import { StyleSheet, TouchableOpacity, View } from 'react-native'
5
5
  import AntDesignIcons from 'react-native-vector-icons/AntDesign'
6
6
  import { useTheme } from 'styled-components/native'
@@ -14,7 +14,9 @@ import {
14
14
  LikeHandsActionContainer,
15
15
  LikeHandsButton,
16
16
  CommentsButtonGroup,
17
+ LogoWrapper,
17
18
  } from './styles'
19
+ import FastImage from 'react-native-fast-image'
18
20
 
19
21
  export const SingleProductReview = (props: SingleProductReviewParams) => {
20
22
  const {
@@ -25,6 +27,7 @@ export const SingleProductReview = (props: SingleProductReviewParams) => {
25
27
 
26
28
  const [, t] = useLanguage()
27
29
  const theme = useTheme()
30
+ const [{ optimizeImage }] = useUtils()
28
31
 
29
32
  const styles = StyleSheet.create({
30
33
  inputTextArea: {
@@ -40,6 +43,12 @@ export const SingleProductReview = (props: SingleProductReviewParams) => {
40
43
  justifyContent: 'center',
41
44
  marginVertical: 10,
42
45
  },
46
+ productStyle: {
47
+ width: 80,
48
+ height: 80,
49
+ marginLeft: 'auto',
50
+ marginRight: 'auto'
51
+ }
43
52
  })
44
53
 
45
54
  const [comments, setComments] = useState<Array<any>>([])
@@ -55,6 +64,12 @@ export const SingleProductReview = (props: SingleProductReviewParams) => {
55
64
  return found
56
65
  }
57
66
 
67
+ const handleChangeQualification = (index: number) => {
68
+ if (qualification === index) return
69
+ setQualification(index)
70
+ setComments([])
71
+ }
72
+
58
73
  const handleChangeComment = (commentItem: any) => {
59
74
  const found = comments.find((comment: any) => comment?.key === commentItem.key)
60
75
  if (found) {
@@ -100,16 +115,34 @@ export const SingleProductReview = (props: SingleProductReviewParams) => {
100
115
  return (
101
116
  <>
102
117
  <ProductContainer>
118
+ <LogoWrapper>
119
+ {product?.images ? (
120
+ <FastImage
121
+ style={styles.productStyle}
122
+ source={{
123
+ uri: optimizeImage(product?.images, 'h_250,c_limit'),
124
+ priority: FastImage.priority.normal,
125
+ }}
126
+ resizeMode={FastImage.resizeMode.cover}
127
+ />
128
+ ) : (
129
+ <OIcon
130
+ src={theme?.images?.dummies?.product}
131
+ width={80}
132
+ height={80}
133
+ />
134
+ )}
135
+ </LogoWrapper>
103
136
  <ProductHeader>
104
137
  <OText numberOfLines={1} style={{ flex: 1 }} color={theme.colors.textNormal}>{product?.name}</OText>
105
138
  <LikeHandsActionContainer>
106
139
  <LikeHandsButton
107
140
  isLike
108
- onPress={() => setQualification(5)}
141
+ onPress={() => handleChangeQualification(5)}
109
142
  >
110
143
  <AntDesignIcons name='like2' size={20} color={qualification === 5 ? theme.colors.primary : theme.colors.lightGray} />
111
144
  </LikeHandsButton>
112
- <LikeHandsButton onPress={() => setQualification(1)}>
145
+ <LikeHandsButton onPress={() => handleChangeQualification(1)}>
113
146
  <AntDesignIcons name='dislike2' size={20} color={qualification === 1 ? theme.colors.primary : theme.colors.lightGray} />
114
147
  </LikeHandsButton>
115
148
  </LikeHandsActionContainer>
@@ -129,7 +162,7 @@ export const SingleProductReview = (props: SingleProductReviewParams) => {
129
162
  style={{ height: 35, paddingLeft: 5, paddingRight: 5, marginHorizontal: 3, marginVertical: 10 }}
130
163
  imgRightSrc={isSelectedComment(commentItem.key) ? theme.images.general.close : null}
131
164
  imgRightStyle={{ tintColor: theme.colors.white, right: 5, margin: 5 }}
132
- onClick={() => handleChangeComment(commentItem) }
165
+ onClick={() => handleChangeComment(commentItem)}
133
166
  />
134
167
  ))}
135
168
  </CommentsButtonGroup>
@@ -15,6 +15,18 @@ export const LikeHandsActionContainer = styled.View`
15
15
  flex-direction: row;
16
16
  `
17
17
 
18
+ export const LogoWrapper = styled.View`
19
+ shadowRadius: 3;
20
+ shadowOffset: { width: 1, height: 4 };
21
+ elevation: 3;
22
+ borderRadius: 8;
23
+ shadowOpacity: 0.1;
24
+ overflow: hidden;
25
+ width: 80;
26
+ marginLeft: auto;
27
+ marginRight: auto;
28
+ `
29
+
18
30
  export const LikeHandsButton = styled.TouchableOpacity`
19
31
  ${(props: any) => props.isLike && css`
20
32
  margin-horizontal: 15px;
@@ -128,7 +128,7 @@ const styles = StyleSheet.create({
128
128
  },
129
129
  cardsList: {
130
130
  width: '100%',
131
- maxHeight: 130
131
+ maxHeight: 150
132
132
  },
133
133
  })
134
134
 
@@ -61,7 +61,9 @@ const StripeElementsFormUI = (props: any) => {
61
61
  }
62
62
 
63
63
  if (user?.address) {
64
- billingDetails.address.line1 = user?.address
64
+ billingDetails.address = {
65
+ line1: user?.address
66
+ }
65
67
  }
66
68
 
67
69
  const createPayMethod = async () => {
@@ -71,7 +73,13 @@ const StripeElementsFormUI = (props: any) => {
71
73
  }
72
74
  try {
73
75
  setCreatePmLoading(true)
74
- const { paymentMethod } = await createPaymentMethod(params);
76
+ const { paymentMethod, error } = await createPaymentMethod(params);
77
+
78
+ if (error) {
79
+ setErrors(error?.message);
80
+ setCreatePmLoading(false)
81
+ return
82
+ }
75
83
 
76
84
  setCreatePmLoading(false)
77
85
  handleSource && handleSource({
@@ -187,6 +195,9 @@ const StripeElementsFormUI = (props: any) => {
187
195
  cardStyle={{
188
196
  backgroundColor: '#FFFFFF',
189
197
  textColor: '#000000',
198
+ borderWidth: 1,
199
+ borderRadius: 8,
200
+ borderColor: theme.colors.border
190
201
  }}
191
202
  style={{
192
203
  width: '100%',