ordering-ui-react-native 0.16.83 → 0.16.84-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 (219) hide show
  1. package/package.json +5 -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/LanguageSelector/index.tsx +21 -16
  9. package/src/components/Messages/index.tsx +2 -2
  10. package/src/components/OrderCreating/index.tsx +1 -21
  11. package/src/components/OrdersOption/index.tsx +54 -56
  12. package/src/components/PaymentOptionsWebView/index.tsx +119 -120
  13. package/src/components/SingleProductReview/index.tsx +7 -4
  14. package/src/components/VerifyPhone/styles.tsx +1 -2
  15. package/src/components/shared/OToast.tsx +4 -4
  16. package/src/utils/index.tsx +2 -1
  17. package/themes/business/index.tsx +2 -0
  18. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +260 -238
  19. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  20. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  21. package/themes/business/src/components/Chat/index.tsx +31 -31
  22. package/themes/business/src/components/DriverMap/index.tsx +22 -9
  23. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  24. package/themes/business/src/components/LoginForm/Otp/index.tsx +120 -0
  25. package/themes/business/src/components/LoginForm/Otp/styles.tsx +7 -0
  26. package/themes/business/src/components/LoginForm/index.tsx +236 -80
  27. package/themes/business/src/components/LoginForm/styles.tsx +10 -0
  28. package/themes/business/src/components/MapView/index.tsx +19 -8
  29. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  30. package/themes/business/src/components/NewOrderNotification/index.tsx +31 -41
  31. package/themes/business/src/components/OrderDetails/Delivery.tsx +4 -3
  32. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +96 -50
  33. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +3 -3
  34. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
  35. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  36. package/themes/business/src/components/OrdersOption/index.tsx +63 -73
  37. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  38. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  39. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  40. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  41. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  42. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  43. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  44. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  45. package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
  46. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  47. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  48. package/themes/business/src/components/PreviousOrders/index.tsx +447 -247
  49. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  50. package/themes/business/src/components/ProductItemAccordion/index.tsx +27 -3
  51. package/themes/business/src/components/ReviewCustomer/index.tsx +39 -15
  52. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  53. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  54. package/themes/business/src/components/shared/OLink.tsx +33 -13
  55. package/themes/business/src/components/shared/OModal.tsx +16 -9
  56. package/themes/business/src/components/shared/OText.tsx +8 -2
  57. package/themes/business/src/types/index.tsx +35 -3
  58. package/themes/business/src/utils/index.tsx +53 -0
  59. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  60. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  61. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  62. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  63. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  64. package/themes/kiosk/src/components/LoginForm/Otp/index.tsx +92 -0
  65. package/themes/kiosk/src/components/LoginForm/Otp/styles.tsx +7 -0
  66. package/themes/kiosk/src/components/LoginForm/index.tsx +473 -151
  67. package/themes/kiosk/src/components/LoginForm/styles.tsx +14 -1
  68. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  69. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  70. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  71. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +1 -0
  72. package/themes/kiosk/src/components/PhoneInputNumber/styles.tsx +1 -3
  73. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  74. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  75. package/themes/kiosk/src/components/shared/OModal.tsx +14 -11
  76. package/themes/kiosk/src/layouts/Container.tsx +7 -1
  77. package/themes/kiosk/src/types/index.d.ts +13 -0
  78. package/themes/kiosk/src/utils/index.tsx +15 -0
  79. package/themes/original/index.tsx +8 -0
  80. package/themes/original/src/components/AddressDetails/index.tsx +10 -8
  81. package/themes/original/src/components/AddressForm/index.tsx +155 -139
  82. package/themes/original/src/components/AddressList/index.tsx +18 -18
  83. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  84. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  85. package/themes/original/src/components/BusinessBasicInformation/index.tsx +118 -76
  86. package/themes/original/src/components/BusinessController/index.tsx +101 -70
  87. package/themes/original/src/components/BusinessController/styles.tsx +14 -9
  88. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  89. package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -6
  90. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  91. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  92. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  93. package/themes/original/src/components/BusinessListingSearch/index.tsx +102 -155
  94. package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
  95. package/themes/original/src/components/BusinessPreorder/index.tsx +96 -15
  96. package/themes/original/src/components/BusinessProductsList/index.tsx +11 -8
  97. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  98. package/themes/original/src/components/BusinessProductsListing/index.tsx +564 -495
  99. package/themes/original/src/components/BusinessProductsListing/styles.tsx +13 -12
  100. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
  101. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  102. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +116 -81
  103. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  104. package/themes/original/src/components/BusinessesListing/index.tsx +6 -6
  105. package/themes/original/src/components/Cart/index.tsx +83 -42
  106. package/themes/original/src/components/CartContent/index.tsx +80 -18
  107. package/themes/original/src/components/CartContent/styles.tsx +11 -1
  108. package/themes/original/src/components/Checkout/index.tsx +74 -86
  109. package/themes/original/src/components/Checkout/styles.tsx +4 -2
  110. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  111. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  112. package/themes/original/src/components/DriverTips/index.tsx +52 -37
  113. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  114. package/themes/original/src/components/Favorite/index.tsx +7 -4
  115. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  116. package/themes/original/src/components/FavoriteList/index.tsx +70 -80
  117. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  118. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  119. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  120. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  121. package/themes/original/src/components/GoogleMap/index.tsx +10 -1
  122. package/themes/original/src/components/Help/index.tsx +8 -8
  123. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +14 -20
  124. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  125. package/themes/original/src/components/HelpGuide/index.tsx +13 -12
  126. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  127. package/themes/original/src/components/HelpOrder/index.tsx +12 -20
  128. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  129. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  130. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  131. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  132. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  133. package/themes/original/src/components/LoginForm/index.tsx +28 -8
  134. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  135. package/themes/original/src/components/MessageListing/index.tsx +7 -40
  136. package/themes/original/src/components/Messages/index.tsx +42 -26
  137. package/themes/original/src/components/MomentOption/index.tsx +195 -88
  138. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  139. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
  140. package/themes/original/src/components/MultiCheckout/index.tsx +179 -77
  141. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  142. package/themes/original/src/components/MultiOrdersDetails/index.tsx +85 -34
  143. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  144. package/themes/original/src/components/MyOrders/index.tsx +66 -17
  145. package/themes/original/src/components/NavBar/index.tsx +7 -6
  146. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  147. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  148. package/themes/original/src/components/Notifications/index.tsx +144 -0
  149. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  150. package/themes/original/src/components/OrderDetails/index.tsx +108 -218
  151. package/themes/original/src/components/OrderDetails/styles.tsx +10 -1
  152. package/themes/original/src/components/OrderItAgain/index.tsx +46 -43
  153. package/themes/original/src/components/OrderProgress/index.tsx +82 -106
  154. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  155. package/themes/original/src/components/OrderSummary/index.tsx +2 -2
  156. package/themes/original/src/components/OrderTypeSelector/index.tsx +13 -6
  157. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +93 -97
  158. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  159. package/themes/original/src/components/OrdersOption/index.tsx +83 -91
  160. package/themes/original/src/components/PageBanner/index.tsx +146 -0
  161. package/themes/original/src/components/PageBanner/styles.tsx +11 -0
  162. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  163. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  164. package/themes/original/src/components/PaymentOptions/index.tsx +2 -2
  165. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  166. package/themes/original/src/components/PlaceSpot/index.tsx +12 -6
  167. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  168. package/themes/original/src/components/ProductForm/index.tsx +240 -256
  169. package/themes/original/src/components/ProductForm/styles.tsx +5 -8
  170. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  171. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -10
  172. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
  173. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  174. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -49
  175. package/themes/original/src/components/ProfessionalProfile/index.tsx +54 -14
  176. package/themes/original/src/components/Promotions/index.tsx +234 -220
  177. package/themes/original/src/components/Promotions/styles.tsx +7 -2
  178. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  179. package/themes/original/src/components/ReviewOrder/index.tsx +43 -11
  180. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  181. package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
  182. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  183. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  184. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  185. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  186. package/themes/original/src/components/ServiceForm/index.tsx +377 -270
  187. package/themes/original/src/components/Sessions/index.tsx +11 -8
  188. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  189. package/themes/original/src/components/SignupForm/index.tsx +78 -66
  190. package/themes/original/src/components/SingleOrderCard/index.tsx +125 -56
  191. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  192. package/themes/original/src/components/SingleProductCard/index.tsx +112 -77
  193. package/themes/original/src/components/SingleProductCard/styles.tsx +14 -13
  194. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  195. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  196. package/themes/original/src/components/StripeCardsList/index.tsx +1 -1
  197. package/themes/original/src/components/StripeElementsForm/index.tsx +4 -1
  198. package/themes/original/src/components/UpsellingProducts/index.tsx +244 -215
  199. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  200. package/themes/original/src/components/UserDetails/index.tsx +5 -3
  201. package/themes/original/src/components/UserFormDetails/index.tsx +50 -54
  202. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  203. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  204. package/themes/original/src/components/UserProfileForm/index.tsx +21 -28
  205. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  206. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  207. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  208. package/themes/original/src/components/Wallets/index.tsx +177 -164
  209. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  210. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  211. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  212. package/themes/original/src/components/shared/OBottomPopup.tsx +1 -1
  213. package/themes/original/src/components/shared/OButton.tsx +9 -4
  214. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  215. package/themes/original/src/components/shared/OInput.tsx +10 -1
  216. package/themes/original/src/layouts/Container.tsx +13 -9
  217. package/themes/original/src/types/index.tsx +42 -7
  218. package/themes/original/src/utils/index.tsx +321 -58
  219. 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(enableIntersection ? 0 : 1)).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: hideAddButton ? 100 : 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,8 +85,8 @@ 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: {
@@ -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';
@@ -123,14 +144,6 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
123
144
  maxCartProductConfig,
124
145
  maxCartProductInventory,
125
146
  );
126
-
127
- const fadeIn = () => {
128
- Animated.timing(fadeAnim, {
129
- toValue: 1,
130
- duration: 500,
131
- useNativeDriver: true
132
- }).start();
133
- };
134
147
 
135
148
  const handleChangeFavorite = () => {
136
149
  if (auth) {
@@ -143,30 +156,32 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
143
156
  const handleChangeIntersection = () => {
144
157
  if (enableIntersection) {
145
158
  setIsIntersectionObserver(true);
146
- fadeIn();
147
159
  }
148
160
  }
149
161
 
150
- useEffect(() => {
151
- if (enableIntersection) fadeIn()
152
- }, [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
+ }
153
169
 
154
170
  return (
155
- <InView style={{ minHeight: hideAddButton ? 125 : 165 }} triggerOnce={true} onChange={(inView: boolean) => handleChangeIntersection()}>
171
+ <InView style={{ minHeight: hideAddButton ? 125 : 190 }} triggerOnce={true} onChange={(inView: boolean) => handleChangeIntersection()}>
156
172
  {isIntersectionObserver ? (
157
- <CardContainer
158
- showAddButton={!hideAddButton}
173
+ <CardAnimation
174
+ onClick={() => handleClickproduct()}
159
175
  style={[
160
176
  styles.container,
161
177
  (isSoldOut || maxProductQuantity <= 0) && styles.soldOutBackgroundStyle,
162
- (style && { ...style }),
178
+ (style && { ...style })
163
179
  ]}
164
- onPress={() => onProductClick?.(product)}
165
180
  >
166
- <View style={{ flexDirection: 'row' }}>
181
+ <View style={{ flexDirection: logoPosition === 'left' ? 'row-reverse' : 'row' }}>
167
182
  {productAddedToCartLength > 0 && (
168
183
  <QuantityContainer style={[styles.quantityContainer, {
169
- transform: [{ translateX: 25 }, { translateY: hideAddButton ? -25 : -55 }],
184
+ transform: [{ translateX: 25 }, { translateY: -25 }],
170
185
  }]}>
171
186
  <OText size={12} color={theme.colors.white}>{productAddedToCartLength.toString()}</OText>
172
187
  </QuantityContainer>
@@ -174,7 +189,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
174
189
  <CardInfo>
175
190
  <View style={styles.titleWrapper}>
176
191
  <OText
177
- size={12}
192
+ size={textSize + 2}
178
193
  weight={'500'}
179
194
  numberOfLines={1}
180
195
  ellipsizeMode="tail"
@@ -182,34 +197,62 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
182
197
  {product?.name}
183
198
  </OText>
184
199
  {!isPreviously && (
185
- <TouchableOpacity
186
- onPress={handleChangeFavorite}
187
- >
188
- <IconAntDesign
189
- name={product?.favorite ? 'heart' : 'hearto'}
190
- color={theme.colors.danger5}
191
- size={18}
192
- />
193
- </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
+ />
194
209
  )}
195
210
  </View>
196
211
  <PricesContainer>
197
- <OText color={theme.colors.primary}>{product?.price ? parsePrice(product?.price) : ''}</OText>
198
- {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 && (
199
216
  <OText style={styles.regularPriceStyle}>{product?.offer_price ? parsePrice(product?.offer_price) : ''}</OText>
200
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
+ )}
201
242
  </PricesContainer>
202
- <OText
203
- size={10}
204
- numberOfLines={!isPreviously ? 2 : 1}
205
- ellipsizeMode="tail"
206
- color={theme.colors.textSecondary}
207
- style={styles.line15}>
208
- {product?.description}
209
- </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
+ )}
210
253
  {isPreviously && (
211
254
  <OText
212
- size={10}
255
+ size={textSize}
213
256
  numberOfLines={1}
214
257
  ellipsizeMode="tail"
215
258
  color={theme.colors.primary}
@@ -218,15 +261,15 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
218
261
  </OText>
219
262
  )}
220
263
  </CardInfo>
221
- <LogoWrapper>
222
- {product?.ribbon?.enabled && (
264
+ <LogoWrapper logoPosition={logoPosition}>
265
+ {!!product?.ribbon?.enabled && (
223
266
  <RibbonBox
224
267
  bgColor={product?.ribbon?.color}
225
268
  isRoundRect={product?.ribbon?.shape === shape?.rectangleRound}
226
269
  isCapsule={product?.ribbon?.shape === shape?.capsuleShape}
227
270
  >
228
271
  <OText
229
- size={10}
272
+ size={textSize}
230
273
  weight={'400'}
231
274
  color={theme.colors.white}
232
275
  numberOfLines={2}
@@ -237,24 +280,15 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
237
280
  </OText>
238
281
  </RibbonBox>
239
282
  )}
240
- {product?.images && (
241
- <Animated.View
242
- style={[
243
- {
244
- // Bind opacity to animated value
245
- opacity: fadeAnim
246
- }
247
- ]}
248
- >
249
- <FastImage
250
- style={styles.productStyle}
251
- source={{
252
- uri: optimizeImage(product?.images, 'h_250,c_limit'),
253
- priority: FastImage.priority.normal,
254
- }}
255
- resizeMode={FastImage.resizeMode.cover}
256
- />
257
- </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
+ />
258
292
  )}
259
293
  </LogoWrapper>
260
294
 
@@ -268,11 +302,12 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
268
302
  </View>
269
303
  {!hideAddButton && (
270
304
  <OButton
271
- onClick={() => onProductClick?.(product)}
305
+ onClick={() => handleClickproduct()}
272
306
  style={{
273
307
  width: '100%',
274
308
  borderRadius: 7.6,
275
309
  marginTop: 10,
310
+ height: 40
276
311
 
277
312
  }}
278
313
  bgColor={isSoldOut ? '#B8B8B8' : theme?.colors?.white}
@@ -281,7 +316,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
281
316
  text={t('ADD', 'Add')}
282
317
  />
283
318
  )}
284
- </CardContainer>
319
+ </CardAnimation>
285
320
  ) : (
286
321
  <View style={{ marginBottom: 28, padding: 12, height: hideAddButton ? 125 : 165 }}>
287
322
  <Placeholder style={{ padding: 5 }} Animation={Fade}>
@@ -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
 
@@ -177,7 +177,7 @@ const StripeElementsFormUI = (props: any) => {
177
177
  <View style={{ flex: 1 }}>
178
178
  <StripeProvider
179
179
  publishableKey={publicKey}
180
- merchantIdentifier={`merchant.${merchantId}`}
180
+ merchantIdentifier={merchantId}
181
181
  urlScheme={merchantId}
182
182
  >
183
183
  {methodsPay?.includes(paymethod) ? (
@@ -195,6 +195,9 @@ const StripeElementsFormUI = (props: any) => {
195
195
  cardStyle={{
196
196
  backgroundColor: '#FFFFFF',
197
197
  textColor: '#000000',
198
+ borderWidth: 1,
199
+ borderRadius: 8,
200
+ borderColor: theme.colors.border
198
201
  }}
199
202
  style={{
200
203
  width: '100%',