ordering-ui-react-native 0.17.4 → 0.17.5-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 (213) hide show
  1. package/package.json +5 -5
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessInformation/index.tsx +11 -4
  4. package/src/components/BusinessInformation/styles.tsx +2 -2
  5. package/src/components/BusinessesListing/index.tsx +1 -1
  6. package/src/components/OrderCreating/index.tsx +1 -21
  7. package/src/components/PaymentOptionsWebView/index.tsx +119 -120
  8. package/src/components/SingleProductReview/index.tsx +7 -4
  9. package/src/components/StripeMethodForm/index.tsx +6 -14
  10. package/src/components/VerifyPhone/styles.tsx +1 -2
  11. package/src/components/shared/OToast.tsx +4 -4
  12. package/src/utils/index.tsx +7 -1
  13. package/themes/business/index.tsx +2 -0
  14. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +265 -240
  15. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  16. package/themes/business/src/components/BusinessController/index.tsx +0 -1
  17. package/themes/business/src/components/Chat/index.tsx +118 -107
  18. package/themes/business/src/components/DriverMap/index.tsx +22 -9
  19. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  20. package/themes/business/src/components/LoginForm/Otp/index.tsx +120 -0
  21. package/themes/business/src/components/LoginForm/Otp/styles.tsx +7 -0
  22. package/themes/business/src/components/LoginForm/index.tsx +238 -80
  23. package/themes/business/src/components/LoginForm/styles.tsx +10 -0
  24. package/themes/business/src/components/MapView/index.tsx +18 -7
  25. package/themes/business/src/components/NewOrderNotification/index.tsx +43 -50
  26. package/themes/business/src/components/OrderDetails/Delivery.tsx +4 -3
  27. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +96 -50
  28. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +59 -62
  29. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
  30. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  31. package/themes/business/src/components/OrderMessage/index.tsx +18 -17
  32. package/themes/business/src/components/OrderSummary/index.tsx +113 -121
  33. package/themes/business/src/components/OrdersOption/index.tsx +32 -75
  34. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  35. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  36. package/themes/business/src/components/PreviousOrders/index.tsx +445 -243
  37. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  38. package/themes/business/src/components/ProductItemAccordion/index.tsx +27 -3
  39. package/themes/business/src/components/ReviewCustomer/index.tsx +41 -24
  40. package/themes/business/src/components/StoresList/index.tsx +2 -2
  41. package/themes/business/src/components/shared/OLink.tsx +33 -13
  42. package/themes/business/src/components/shared/OModal.tsx +16 -9
  43. package/themes/business/src/components/shared/OText.tsx +8 -2
  44. package/themes/business/src/types/index.tsx +33 -2
  45. package/themes/business/src/utils/index.tsx +51 -0
  46. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  47. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  48. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  49. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  50. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  51. package/themes/kiosk/src/components/LoginForm/Otp/index.tsx +92 -0
  52. package/themes/kiosk/src/components/LoginForm/Otp/styles.tsx +7 -0
  53. package/themes/kiosk/src/components/LoginForm/index.tsx +473 -151
  54. package/themes/kiosk/src/components/LoginForm/styles.tsx +14 -1
  55. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  56. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  57. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  58. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +3 -2
  59. package/themes/kiosk/src/components/PhoneInputNumber/styles.tsx +1 -3
  60. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  61. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  62. package/themes/kiosk/src/components/shared/OModal.tsx +14 -11
  63. package/themes/kiosk/src/layouts/Container.tsx +7 -1
  64. package/themes/kiosk/src/types/index.d.ts +13 -0
  65. package/themes/kiosk/src/utils/index.tsx +15 -0
  66. package/themes/original/index.tsx +8 -0
  67. package/themes/original/src/components/AddressDetails/index.tsx +29 -11
  68. package/themes/original/src/components/AddressForm/index.tsx +41 -16
  69. package/themes/original/src/components/AddressList/index.tsx +26 -21
  70. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  71. package/themes/original/src/components/AnalyticsSegment/index.tsx +189 -9
  72. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  73. package/themes/original/src/components/BusinessBasicInformation/index.tsx +125 -82
  74. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +9 -4
  75. package/themes/original/src/components/BusinessController/index.tsx +145 -68
  76. package/themes/original/src/components/BusinessController/styles.tsx +22 -9
  77. package/themes/original/src/components/BusinessFeaturedController/index.tsx +21 -54
  78. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +8 -0
  79. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  80. package/themes/original/src/components/BusinessItemAccordion/index.tsx +24 -23
  81. package/themes/original/src/components/BusinessListingSearch/index.tsx +52 -24
  82. package/themes/original/src/components/BusinessPreorder/index.tsx +97 -16
  83. package/themes/original/src/components/BusinessProductsList/index.tsx +20 -11
  84. package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
  85. package/themes/original/src/components/BusinessProductsListing/index.tsx +617 -490
  86. package/themes/original/src/components/BusinessProductsListing/styles.tsx +7 -13
  87. package/themes/original/src/components/BusinessReviews/index.tsx +3 -1
  88. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -3
  89. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  90. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +98 -78
  91. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  92. package/themes/original/src/components/BusinessesListing/index.tsx +5 -3
  93. package/themes/original/src/components/Cart/index.tsx +88 -43
  94. package/themes/original/src/components/CartContent/index.tsx +102 -3
  95. package/themes/original/src/components/CartContent/styles.tsx +15 -1
  96. package/themes/original/src/components/Checkout/index.tsx +311 -178
  97. package/themes/original/src/components/Checkout/styles.tsx +4 -2
  98. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  99. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  100. package/themes/original/src/components/CouponControl/index.tsx +10 -3
  101. package/themes/original/src/components/DriverTips/index.tsx +52 -37
  102. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  103. package/themes/original/src/components/Favorite/index.tsx +7 -4
  104. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  105. package/themes/original/src/components/FavoriteList/index.tsx +70 -80
  106. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  107. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  108. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  109. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +96 -0
  110. package/themes/original/src/components/GiftCard/GiftCardUI/styles.tsx +5 -0
  111. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +100 -0
  112. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +8 -0
  113. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +178 -0
  114. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +8 -0
  115. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +165 -0
  116. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +9 -0
  117. package/themes/original/src/components/Help/index.tsx +8 -8
  118. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +11 -22
  119. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  120. package/themes/original/src/components/HelpGuide/index.tsx +12 -16
  121. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  122. package/themes/original/src/components/HelpOrder/index.tsx +12 -25
  123. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  124. package/themes/original/src/components/Home/index.tsx +13 -4
  125. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  126. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  127. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  128. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  129. package/themes/original/src/components/LoginForm/index.tsx +43 -19
  130. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  131. package/themes/original/src/components/MessageListing/index.tsx +16 -42
  132. package/themes/original/src/components/Messages/index.tsx +32 -10
  133. package/themes/original/src/components/MomentOption/index.tsx +195 -88
  134. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  135. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +117 -96
  136. package/themes/original/src/components/MultiCheckout/index.tsx +248 -83
  137. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  138. package/themes/original/src/components/MultiOrdersDetails/index.tsx +67 -20
  139. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  140. package/themes/original/src/components/MyOrders/index.tsx +66 -17
  141. package/themes/original/src/components/NavBar/index.tsx +6 -11
  142. package/themes/original/src/components/Notifications/index.tsx +144 -0
  143. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  144. package/themes/original/src/components/OrderDetails/OrderEta.tsx +61 -0
  145. package/themes/original/src/components/OrderDetails/index.tsx +262 -347
  146. package/themes/original/src/components/OrderDetails/styles.tsx +10 -1
  147. package/themes/original/src/components/OrderItAgain/index.tsx +47 -43
  148. package/themes/original/src/components/OrderProgress/index.tsx +74 -112
  149. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  150. package/themes/original/src/components/OrderSummary/index.tsx +68 -29
  151. package/themes/original/src/components/OrderTypeSelector/index.tsx +4 -3
  152. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +28 -19
  153. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  154. package/themes/original/src/components/OrdersOption/index.tsx +101 -89
  155. package/themes/original/src/components/PageBanner/index.tsx +171 -0
  156. package/themes/original/src/components/PageBanner/styles.tsx +11 -0
  157. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  158. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  159. package/themes/original/src/components/PaymentOptions/index.tsx +3 -3
  160. package/themes/original/src/components/PhoneInputNumber/index.tsx +3 -3
  161. package/themes/original/src/components/PlaceSpot/index.tsx +12 -6
  162. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  163. package/themes/original/src/components/ProductForm/index.tsx +240 -261
  164. package/themes/original/src/components/ProductForm/styles.tsx +4 -7
  165. package/themes/original/src/components/ProductItemAccordion/index.tsx +200 -128
  166. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -10
  167. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
  168. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  169. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -49
  170. package/themes/original/src/components/ProfessionalProfile/index.tsx +54 -14
  171. package/themes/original/src/components/Promotions/index.tsx +234 -220
  172. package/themes/original/src/components/Promotions/styles.tsx +10 -3
  173. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  174. package/themes/original/src/components/ReviewOrder/index.tsx +26 -9
  175. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  176. package/themes/original/src/components/ReviewProducts/index.tsx +7 -4
  177. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  178. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  179. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  180. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  181. package/themes/original/src/components/ServiceForm/index.tsx +377 -270
  182. package/themes/original/src/components/Sessions/index.tsx +11 -8
  183. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  184. package/themes/original/src/components/SignupForm/index.tsx +79 -66
  185. package/themes/original/src/components/SingleOrderCard/index.tsx +148 -62
  186. package/themes/original/src/components/SingleOrderCard/styles.tsx +11 -9
  187. package/themes/original/src/components/SingleProductCard/index.tsx +111 -56
  188. package/themes/original/src/components/SingleProductCard/styles.tsx +27 -13
  189. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  190. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  191. package/themes/original/src/components/StripeCardsList/index.tsx +1 -1
  192. package/themes/original/src/components/StripeElementsForm/index.tsx +4 -1
  193. package/themes/original/src/components/UpsellingProducts/index.tsx +238 -218
  194. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  195. package/themes/original/src/components/UserDetails/index.tsx +8 -4
  196. package/themes/original/src/components/UserFormDetails/index.tsx +53 -54
  197. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  198. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  199. package/themes/original/src/components/UserProfileForm/index.tsx +21 -28
  200. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  201. package/themes/original/src/components/Wallets/index.tsx +31 -17
  202. package/themes/original/src/components/Wallets/styles.tsx +2 -0
  203. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  204. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  205. package/themes/original/src/components/shared/OBottomPopup.tsx +1 -1
  206. package/themes/original/src/components/shared/OButton.tsx +6 -2
  207. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  208. package/themes/original/src/components/shared/OInput.tsx +10 -1
  209. package/themes/original/src/components/shared/OModal.tsx +3 -3
  210. package/themes/original/src/layouts/Container.tsx +13 -9
  211. package/themes/original/src/types/index.tsx +47 -9
  212. package/themes/original/src/utils/index.tsx +364 -58
  213. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,11 +1,4 @@
1
- import styled from 'styled-components/native'
2
-
3
- export const Container = styled.TouchableOpacity`
4
- border-radius: 7.6px;
5
- box-shadow: 0 1px 2px #0000001A;
6
- margin-bottom: 10px;
7
- padding-vertical: 5px;
8
- `
1
+ import styled, { css } from 'styled-components/native'
9
2
 
10
3
  export const InnerContainer = styled.View`
11
4
  flex-direction: row;
@@ -15,6 +8,9 @@ export const InnerContainer = styled.View`
15
8
  export const Logo = styled.View`
16
9
  border-radius: 7.6px;
17
10
  margin-right: 12px;
11
+ ${({ isMulti } : any) => isMulti && css`
12
+ margin-right: 5px;
13
+ `}
18
14
  `
19
15
 
20
16
  export const CardInfoWrapper = styled.View`
@@ -23,7 +19,7 @@ export const CardInfoWrapper = styled.View`
23
19
 
24
20
  export const ContentHeader = styled.View`
25
21
  flex-direction: row;
26
- justify-content: space-between;
22
+ justify-content: flex-end;
27
23
  `
28
24
 
29
25
  export const ButtonWrapper = styled.View`
@@ -52,3 +48,9 @@ export const Price = styled.View`
52
48
  margin-left: 10px;
53
49
  width: 30%;
54
50
  `
51
+
52
+ export const MultiLogosContainer = styled.View`
53
+ display: flex;
54
+ align-items: center;
55
+ flex-direction: row;
56
+ `
@@ -5,18 +5,21 @@ import {
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
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
- import { shape } from '../../utils';
20
+ import { lightenDarkenColor, 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,19 +39,34 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
36
39
  enableIntersection,
37
40
  navigation,
38
41
  businessId,
39
- isPreviously
42
+ isPreviously,
43
+ viewString,
44
+ businessSingleId
40
45
  } = props;
41
46
 
42
47
  const theme = useTheme();
43
48
  const hideAddButton = theme?.business_view?.components?.products?.components?.add_to_cart_button?.hidden ?? true
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
54
+ const textSize = isChewLayout ? 12 : 10
55
+ const logoPosition = theme?.business_view?.components?.products?.components?.product?.components?.image?.position
44
56
 
45
57
  const styles = StyleSheet.create({
46
58
  container: {
47
59
  borderWidth: 1,
48
- borderRadius: 7.6,
49
60
  borderColor: theme.colors.border,
50
61
  marginBottom: 25,
51
- minHeight: hideAddButton ? 100 : 165
62
+ minHeight: hideAddButton ? 100 : 165,
63
+ flex: 1,
64
+ flexDirection: hideAddButton ? 'row' : 'column',
65
+ justifyContent: 'space-between',
66
+ alignItems: 'center',
67
+ padding: 12,
68
+ borderRadius: 10,
69
+ position: 'relative'
52
70
  },
53
71
  titleWrapper: {
54
72
  flexDirection: 'row',
@@ -68,8 +86,8 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
68
86
  textTransform: 'uppercase',
69
87
  },
70
88
  productStyle: {
71
- width: 75,
72
- height: 75,
89
+ width: 85,
90
+ height: 85,
73
91
  borderRadius: 7.6
74
92
  },
75
93
  quantityContainer: {
@@ -87,7 +105,12 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
87
105
  color: '#808080',
88
106
  textDecorationLine: 'line-through',
89
107
  marginLeft: 7,
90
- marginRight: 7
108
+ marginRight: 0
109
+ },
110
+ productTagsStyle: {
111
+ width: 30,
112
+ height: 30,
113
+ marginRight: 5
91
114
  }
92
115
  });
93
116
 
@@ -96,6 +119,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
96
119
  const [{ auth }] = useSession()
97
120
  const [{ parsePrice, optimizeImage, parseDate }] = useUtils();
98
121
  const [orderState] = useOrder()
122
+ const [, { showToast }] = useToast()
99
123
  const [isIntersectionObserver, setIsIntersectionObserver] = useState(!enableIntersection)
100
124
 
101
125
  const editMode = typeof product?.code !== 'undefined';
@@ -136,22 +160,29 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
136
160
  }
137
161
  }
138
162
 
163
+ const handleClickproduct = () => {
164
+ if (productAddedToCartLength && product?.maximum_per_order && productAddedToCartLength >= product?.maximum_per_order) {
165
+ showToast(ToastType.Error, t('PRODUCT_ON_MAXIMUM_ORDER', 'The product is on maximum order'))
166
+ return
167
+ }
168
+ onProductClick?.(product)
169
+ }
170
+
139
171
  return (
140
172
  <InView style={{ minHeight: hideAddButton ? 125 : 190 }} triggerOnce={true} onChange={(inView: boolean) => handleChangeIntersection()}>
141
173
  {isIntersectionObserver ? (
142
- <CardContainer
143
- showAddButton={!hideAddButton}
174
+ <CardAnimation
175
+ onClick={() => handleClickproduct()}
144
176
  style={[
145
177
  styles.container,
146
178
  (isSoldOut || maxProductQuantity <= 0) && styles.soldOutBackgroundStyle,
147
- (style && { ...style }),
179
+ (style && { ...style })
148
180
  ]}
149
- onPress={() => onProductClick?.(product)}
150
181
  >
151
- <View style={{ flexDirection: 'row' }}>
182
+ <View style={{ flexDirection: logoPosition === 'left' ? 'row-reverse' : 'row' }}>
152
183
  {productAddedToCartLength > 0 && (
153
- <QuantityContainer style={[styles.quantityContainer, {
154
- transform: [{ translateX: 25 }, { translateY: hideAddButton ? -25 : -55 }],
184
+ <QuantityContainer businessSingleId={businessSingleId} style={[styles.quantityContainer, {
185
+ transform: [{ translateX: 25 }, { translateY: -25 }],
155
186
  }]}>
156
187
  <OText size={12} color={theme.colors.white}>{productAddedToCartLength.toString()}</OText>
157
188
  </QuantityContainer>
@@ -159,7 +190,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
159
190
  <CardInfo>
160
191
  <View style={styles.titleWrapper}>
161
192
  <OText
162
- size={12}
193
+ size={textSize + 2}
163
194
  weight={'500'}
164
195
  numberOfLines={1}
165
196
  ellipsizeMode="tail"
@@ -167,15 +198,15 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
167
198
  {product?.name}
168
199
  </OText>
169
200
  {!isPreviously && (
170
- <TouchableOpacity
171
- onPress={handleChangeFavorite}
172
- >
173
- <IconAntDesign
174
- name={product?.favorite ? 'heart' : 'hearto'}
175
- color={theme.colors.danger5}
176
- size={18}
177
- />
178
- </TouchableOpacity>
201
+ <LottieAnimation
202
+ type='favorite'
203
+ onClick={handleChangeFavorite}
204
+ initialValue={product?.favorite ? 0.75 : 0}
205
+ toValue={product?.favorite ? 0 : 0.75}
206
+ disableAnimation={!auth}
207
+ iconProps={{ color: theme.colors.danger5, size: 18 }}
208
+ isActive={product?.favorite}
209
+ />
179
210
  )}
180
211
  </View>
181
212
  <PricesContainer>
@@ -185,18 +216,44 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
185
216
  {product?.offer_price !== null && !!product?.in_offer && (
186
217
  <OText style={styles.regularPriceStyle}>{product?.offer_price ? parsePrice(product?.offer_price) : ''}</OText>
187
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
+ )}
188
243
  </PricesContainer>
189
- <OText
190
- size={10}
191
- numberOfLines={!isPreviously ? 2 : 1}
192
- ellipsizeMode="tail"
193
- color={theme.colors.textSecondary}
194
- style={styles.line15}>
195
- {product?.description}
196
- </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
+ )}
197
254
  {isPreviously && (
198
255
  <OText
199
- size={10}
256
+ size={textSize}
200
257
  numberOfLines={1}
201
258
  ellipsizeMode="tail"
202
259
  color={theme.colors.primary}
@@ -205,17 +262,19 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
205
262
  </OText>
206
263
  )}
207
264
  </CardInfo>
208
- <LogoWrapper>
265
+ <LogoWrapper logoPosition={logoPosition}>
209
266
  {!!product?.ribbon?.enabled && (
210
267
  <RibbonBox
211
268
  bgColor={product?.ribbon?.color}
269
+ colorText={lightenDarkenColor(product?.ribbon?.color)}
270
+ borderRibbon={lightenDarkenColor(product?.ribbon?.color)}
212
271
  isRoundRect={product?.ribbon?.shape === shape?.rectangleRound}
213
272
  isCapsule={product?.ribbon?.shape === shape?.capsuleShape}
214
273
  >
215
274
  <OText
216
- size={10}
275
+ size={textSize}
217
276
  weight={'400'}
218
- color={theme.colors.white}
277
+ color={lightenDarkenColor(product?.ribbon?.color) ? theme.colors.black : theme.colors.white}
219
278
  numberOfLines={2}
220
279
  ellipsizeMode='tail'
221
280
  lineHeight={13}
@@ -224,21 +283,16 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
224
283
  </OText>
225
284
  </RibbonBox>
226
285
  )}
227
- {product?.images ? (
228
- <FastImage
229
- style={styles.productStyle}
230
- source={{
231
- uri: optimizeImage(product?.images, 'h_250,c_limit'),
232
- priority: FastImage.priority.normal,
233
- }}
234
- resizeMode={FastImage.resizeMode.cover}
235
- />
236
- ) : (
237
- <OIcon
238
- src={theme?.images?.dummies?.product}
239
- style={styles.productStyle}
240
- />
241
- )}
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
+ )}
242
296
  </LogoWrapper>
243
297
 
244
298
  {(isSoldOut || maxProductQuantity <= 0) && (
@@ -251,11 +305,12 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
251
305
  </View>
252
306
  {!hideAddButton && (
253
307
  <OButton
254
- onClick={() => onProductClick?.(product)}
308
+ onClick={() => handleClickproduct()}
255
309
  style={{
256
310
  width: '100%',
257
311
  borderRadius: 7.6,
258
312
  marginTop: 10,
313
+ height: 40
259
314
 
260
315
  }}
261
316
  bgColor={isSoldOut ? '#B8B8B8' : theme?.colors?.white}
@@ -264,7 +319,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
264
319
  text={t('ADD', 'Add')}
265
320
  />
266
321
  )}
267
- </CardContainer>
322
+ </CardAnimation>
268
323
  ) : (
269
324
  <View style={{ marginBottom: 28, padding: 12, height: hideAddButton ? 125 : 165 }}>
270
325
  <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;
@@ -26,15 +18,32 @@ export const QuantityContainer = styled.View`
26
18
  background: ${({ theme }: any) => theme.colors.primary};
27
19
  align-items: center;
28
20
  justify-content: center;
21
+ ${({ businessSingleId }: any) => businessSingleId ? css`
22
+ left: 0;
23
+ ` : css`
24
+ right: 0;
25
+ `}
29
26
  `
30
27
  export const PricesContainer = styled.View`
31
28
  flex-direction: row;
32
29
  align-items: center;
30
+ margin-vertical: 6px;
33
31
  `
34
32
 
35
33
  export const LogoWrapper = styled.View`
36
34
  position: relative;
37
- margin-left: 12px;
35
+ margin-left: ${(props) => !props.logoPosition || props.logoPosition === 'right' ? '12px' : '0px'};
36
+ margin-right: ${(props) => props.logoPosition === 'right' ? '0px' : '12px'};
37
+ `
38
+ export const WrapTags = styled.View`
39
+ display: flex;
40
+ flex-direction: row;
41
+ justify-content: flex-start;
42
+ margin-left: 10px;
43
+ `
44
+ export const TagsContainer = styled.View`
45
+ display: flex;
46
+ margin: auto;
38
47
  `
39
48
 
40
49
  export const RibbonBox = styled.View`
@@ -45,16 +54,21 @@ export const RibbonBox = styled.View`
45
54
  background-color: ${(props: any) => props.theme.colors.primary};
46
55
  padding: 1px 8px;
47
56
  max-width: 60px;
48
-
49
57
  ${(props: any) => props.bgColor && css`
50
58
  background-color: ${props.bgColor};
51
59
  `}
52
-
53
60
  ${(props: any) => props.isRoundRect && css`
54
61
  border-radius: 7.6px;
55
62
  `}
56
-
57
63
  ${(props: any) => props.isCapsule && css`
58
64
  border-radius: 50px;
59
65
  `}
66
+
67
+ ${(props: any) => props.colorText && css`
68
+ color: ${props.colorText ? 'black' : 'white'};
69
+ `}
70
+
71
+ ${(props: any) => props.borderRibbon && css`
72
+ border: 1px solid ${props.borderRibbon ? 'black' : 'white'};
73
+ `}
60
74
  `
@@ -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
+ border-radius: 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%',