ordering-ui-react-native 0.17.66 → 0.17.67-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 (207) hide show
  1. package/package.json +8 -7
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessInformation/index.tsx +10 -9
  4. package/src/components/BusinessesListing/index.tsx +1 -1
  5. package/src/components/OrderCreating/index.tsx +1 -21
  6. package/src/components/PaymentOptionsWebView/index.tsx +29 -8
  7. package/src/components/PhoneInputNumber/index.tsx +6 -2
  8. package/src/components/StripeMethodForm/index.tsx +136 -102
  9. package/src/components/VerifyPhone/styles.tsx +1 -2
  10. package/src/components/shared/OToast.tsx +2 -1
  11. package/src/types/index.tsx +5 -0
  12. package/src/utils/index.tsx +5 -0
  13. package/themes/business/index.tsx +2 -0
  14. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +270 -245
  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 +123 -111
  18. package/themes/business/src/components/DriverMap/index.tsx +17 -6
  19. package/themes/business/src/components/DriverSchedule/index.tsx +42 -5
  20. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  21. package/themes/business/src/components/LoginForm/Otp/index.tsx +31 -3
  22. package/themes/business/src/components/LoginForm/index.tsx +15 -22
  23. package/themes/business/src/components/MapView/index.tsx +10 -10
  24. package/themes/business/src/components/NewOrderNotification/index.tsx +35 -21
  25. package/themes/business/src/components/NotFoundSource/index.tsx +2 -2
  26. package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
  27. package/themes/business/src/components/OrderDetails/Delivery.tsx +191 -6
  28. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +133 -65
  29. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +64 -63
  30. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
  31. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  32. package/themes/business/src/components/OrderMessage/index.tsx +19 -18
  33. package/themes/business/src/components/OrderSummary/index.tsx +114 -123
  34. package/themes/business/src/components/OrdersOption/index.tsx +32 -75
  35. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +249 -0
  36. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  37. package/themes/business/src/components/PreviousOrders/index.tsx +444 -242
  38. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  39. package/themes/business/src/components/ProductItemAccordion/index.tsx +27 -3
  40. package/themes/business/src/components/ReviewCustomer/index.tsx +30 -15
  41. package/themes/business/src/components/StoresList/index.tsx +3 -4
  42. package/themes/business/src/components/UserProfileForm/index.tsx +11 -13
  43. package/themes/business/src/components/shared/OLink.tsx +33 -13
  44. package/themes/business/src/components/shared/OModal.tsx +16 -9
  45. package/themes/business/src/components/shared/OText.tsx +8 -2
  46. package/themes/business/src/types/index.tsx +28 -12
  47. package/themes/business/src/utils/index.tsx +29 -2
  48. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  49. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  50. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  51. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  52. package/themes/kiosk/src/components/Intro/index.tsx +16 -1
  53. package/themes/kiosk/src/components/LoginForm/index.tsx +7 -9
  54. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  55. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  56. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  57. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +2 -2
  58. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  59. package/themes/original/index.tsx +4 -0
  60. package/themes/original/src/components/AddressDetails/index.tsx +19 -3
  61. package/themes/original/src/components/AddressForm/index.tsx +61 -39
  62. package/themes/original/src/components/AddressList/index.tsx +27 -22
  63. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  64. package/themes/original/src/components/AnalyticsSegment/index.tsx +193 -10
  65. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  66. package/themes/original/src/components/AppleLogin/styles.tsx +3 -1
  67. package/themes/original/src/components/BusinessBasicInformation/index.tsx +153 -96
  68. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +10 -12
  69. package/themes/original/src/components/BusinessController/index.tsx +94 -66
  70. package/themes/original/src/components/BusinessController/styles.tsx +22 -3
  71. package/themes/original/src/components/BusinessFeaturedController/index.tsx +21 -54
  72. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +8 -0
  73. package/themes/original/src/components/BusinessInformation/index.tsx +142 -109
  74. package/themes/original/src/components/BusinessItemAccordion/index.tsx +15 -20
  75. package/themes/original/src/components/BusinessListingSearch/index.tsx +349 -339
  76. package/themes/original/src/components/BusinessListingSearch/styles.tsx +0 -18
  77. package/themes/original/src/components/BusinessPreorder/index.tsx +103 -19
  78. package/themes/original/src/components/BusinessProductsCategories/index.tsx +1 -2
  79. package/themes/original/src/components/BusinessProductsList/index.tsx +15 -7
  80. package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
  81. package/themes/original/src/components/BusinessProductsListing/UpsellingRedirect.tsx +1 -1
  82. package/themes/original/src/components/BusinessProductsListing/index.tsx +684 -555
  83. package/themes/original/src/components/BusinessProductsListing/styles.tsx +2 -2
  84. package/themes/original/src/components/BusinessReviews/index.tsx +3 -1
  85. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  86. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +69 -38
  87. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +0 -1
  88. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  89. package/themes/original/src/components/Cart/index.tsx +77 -50
  90. package/themes/original/src/components/CartContent/index.tsx +117 -20
  91. package/themes/original/src/components/CartContent/styles.tsx +17 -7
  92. package/themes/original/src/components/Checkout/index.tsx +356 -124
  93. package/themes/original/src/components/CitiesControl/index.tsx +1 -1
  94. package/themes/original/src/components/CouponControl/index.tsx +10 -3
  95. package/themes/original/src/components/DriverTips/index.tsx +52 -34
  96. package/themes/original/src/components/FacebookLogin/styles.tsx +3 -1
  97. package/themes/original/src/components/Favorite/index.tsx +8 -9
  98. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  99. package/themes/original/src/components/FavoriteList/index.tsx +1 -35
  100. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  101. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  102. package/themes/original/src/components/GPSButton/index.tsx +6 -4
  103. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +96 -0
  104. package/themes/original/src/components/GiftCard/GiftCardUI/styles.tsx +5 -0
  105. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +100 -0
  106. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +8 -0
  107. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +191 -0
  108. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +8 -0
  109. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +165 -0
  110. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +9 -0
  111. package/themes/original/src/components/GoogleLogin/styles.tsx +1 -1
  112. package/themes/original/src/components/GoogleMap/index.tsx +60 -5
  113. package/themes/original/src/components/Help/index.tsx +8 -8
  114. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +10 -31
  115. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +5 -3
  116. package/themes/original/src/components/HelpGuide/index.tsx +6 -6
  117. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  118. package/themes/original/src/components/HelpOrder/index.tsx +6 -15
  119. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  120. package/themes/original/src/components/Home/index.tsx +13 -4
  121. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  122. package/themes/original/src/components/LoginForm/Otp/index.tsx +91 -31
  123. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  124. package/themes/original/src/components/LoginForm/index.tsx +64 -34
  125. package/themes/original/src/components/LottieAnimation/index.tsx +89 -55
  126. package/themes/original/src/components/MessageListing/index.tsx +16 -42
  127. package/themes/original/src/components/Messages/index.tsx +29 -7
  128. package/themes/original/src/components/MomentOption/index.tsx +195 -90
  129. package/themes/original/src/components/MomentSelector/index.tsx +1 -1
  130. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  131. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +162 -51
  132. package/themes/original/src/components/MultiCheckout/index.tsx +330 -99
  133. package/themes/original/src/components/MultiCheckout/styles.tsx +3 -1
  134. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  135. package/themes/original/src/components/MultiOrdersDetails/index.tsx +68 -21
  136. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  137. package/themes/original/src/components/MyOrders/index.tsx +40 -29
  138. package/themes/original/src/components/NavBar/index.tsx +20 -17
  139. package/themes/original/src/components/NotFoundSource/index.tsx +14 -10
  140. package/themes/original/src/components/Notifications/index.tsx +46 -50
  141. package/themes/original/src/components/Notifications/styles.tsx +6 -3
  142. package/themes/original/src/components/OrderDetails/OrderEta.tsx +76 -0
  143. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +21 -5
  144. package/themes/original/src/components/OrderDetails/index.tsx +191 -363
  145. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  146. package/themes/original/src/components/OrderItAgain/index.tsx +3 -1
  147. package/themes/original/src/components/OrderProgress/index.tsx +30 -56
  148. package/themes/original/src/components/OrderSummary/index.tsx +88 -59
  149. package/themes/original/src/components/OrderTypeSelector/index.tsx +2 -1
  150. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +14 -14
  151. package/themes/original/src/components/OrdersOption/index.tsx +78 -67
  152. package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
  153. package/themes/original/src/components/PageBanner/index.tsx +98 -38
  154. package/themes/original/src/components/PageBanner/styles.tsx +0 -10
  155. package/themes/original/src/components/PaymentOptionCard/index.tsx +180 -0
  156. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  157. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  158. package/themes/original/src/components/PaymentOptions/index.tsx +78 -35
  159. package/themes/original/src/components/PhoneInputNumber/index.tsx +3 -3
  160. package/themes/original/src/components/ProductForm/index.tsx +105 -30
  161. package/themes/original/src/components/ProductForm/styles.tsx +5 -5
  162. package/themes/original/src/components/ProductItemAccordion/index.tsx +14 -11
  163. package/themes/original/src/components/ProductOptionSubOption/index.tsx +20 -18
  164. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +5 -9
  165. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  166. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -50
  167. package/themes/original/src/components/ProfessionalProfile/index.tsx +36 -7
  168. package/themes/original/src/components/Promotions/index.tsx +5 -4
  169. package/themes/original/src/components/Promotions/styles.tsx +3 -1
  170. package/themes/original/src/components/ReviewOrder/index.tsx +26 -9
  171. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  172. package/themes/original/src/components/ReviewProducts/index.tsx +16 -7
  173. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  174. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  175. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  176. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  177. package/themes/original/src/components/ServiceForm/index.tsx +66 -17
  178. package/themes/original/src/components/Sessions/index.tsx +11 -8
  179. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  180. package/themes/original/src/components/SignupForm/index.tsx +43 -27
  181. package/themes/original/src/components/SingleOrderCard/index.tsx +130 -56
  182. package/themes/original/src/components/SingleOrderCard/styles.tsx +11 -2
  183. package/themes/original/src/components/SingleProductCard/index.tsx +72 -31
  184. package/themes/original/src/components/SingleProductCard/styles.tsx +20 -4
  185. package/themes/original/src/components/SingleProductReview/styles.tsx +1 -1
  186. package/themes/original/src/components/StripeCardsList/index.tsx +49 -5
  187. package/themes/original/src/components/StripeElementsForm/index.tsx +48 -34
  188. package/themes/original/src/components/StripeElementsForm/naked.tsx +12 -1
  189. package/themes/original/src/components/UpsellingProducts/index.tsx +238 -224
  190. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  191. package/themes/original/src/components/UserDetails/index.tsx +3 -1
  192. package/themes/original/src/components/UserFormDetails/index.tsx +76 -7
  193. package/themes/original/src/components/UserFormDetails/styles.tsx +1 -1
  194. package/themes/original/src/components/UserProfile/index.tsx +88 -79
  195. package/themes/original/src/components/UserProfileForm/index.tsx +27 -29
  196. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  197. package/themes/original/src/components/UserVerification/index.tsx +52 -49
  198. package/themes/original/src/components/WalletTransactionItem/index.tsx +2 -2
  199. package/themes/original/src/components/WalletTransactions/index.tsx +3 -3
  200. package/themes/original/src/components/Wallets/index.tsx +66 -30
  201. package/themes/original/src/components/Wallets/styles.tsx +3 -4
  202. package/themes/original/src/components/shared/OButton.tsx +6 -2
  203. package/themes/original/src/components/shared/OInput.tsx +6 -1
  204. package/themes/original/src/components/shared/OModal.tsx +3 -3
  205. package/themes/original/src/types/index.tsx +42 -10
  206. package/themes/original/src/utils/index.tsx +273 -1
  207. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,16 +1,18 @@
1
- import React, { useState } from 'react';
1
+ import React, { useState, useEffect } from 'react';
2
2
  import {
3
3
  SingleOrderCard as SingleOrderCardController,
4
4
  useUtils,
5
5
  useOrder,
6
6
  useLanguage
7
7
  } from 'ordering-components/native';
8
+ import FastImage from 'react-native-fast-image'
8
9
  import { StyleSheet, TouchableOpacity, View } from 'react-native';
9
10
  import { useTheme } from 'styled-components/native';
10
11
  import { OIcon, OText, OButton } from '../shared';
11
12
  import { SingleOrderCardParams } from '../../types';
12
13
  import { OAlert } from '../../../../../src/components/shared'
13
-
14
+ import { OrderEta } from '../OrderDetails/OrderEta'
15
+ import { useIsFocused } from '@react-navigation/native';
14
16
  import {
15
17
  InnerContainer,
16
18
  Logo,
@@ -19,7 +21,8 @@ import {
19
21
  ButtonWrapper,
20
22
  ContentFooter,
21
23
  UnreadMessageCounter,
22
- Price
24
+ Price,
25
+ MultiLogosContainer
23
26
  } from './styles';
24
27
  import { LottieAnimation } from '../LottieAnimation';
25
28
  import { CardAnimation } from '../shared/CardAnimation';
@@ -43,12 +46,13 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
43
46
  const [, t] = useLanguage();
44
47
  const [{ carts }] = useOrder()
45
48
  const theme = useTheme();
49
+ const isFocused = useIsFocused();
46
50
 
47
- const [reorderSelected, setReorderSelected] = useState<number | null>(null);
51
+ let [reorderSelected, setReorderSelected] = useState<number | null>(null);
48
52
  const [confirm, setConfirm] = useState<any>({ open: false, content: null, handleOnAccept: null, id: null, title: null })
49
53
  const [isPressed, setIsPressed] = useState(false)
50
54
 
51
- const allowedOrderStatus = [1, 2, 5, 6, 10, 11, 12];
55
+ const allowedOrderStatus = [1, 2, 5, 6, 10, 11, 12, 15];
52
56
 
53
57
  const styles = StyleSheet.create({
54
58
  container: {
@@ -61,6 +65,11 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
61
65
  width: 64,
62
66
  height: 64
63
67
  },
68
+ minilogo: {
69
+ borderRadius: 8,
70
+ width: 40,
71
+ height: 40
72
+ },
64
73
  logoWrapper: {
65
74
  overflow: 'hidden',
66
75
  backgroundColor: 'white',
@@ -78,9 +87,13 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
78
87
  marginRight: 2,
79
88
  },
80
89
  reorderLoading: {
81
- width: 80,
82
- height: 40,
83
- borderRadius: 10,
90
+ height: 23,
91
+ paddingLeft: 20,
92
+ paddingRight: 20,
93
+ borderRadius: 23,
94
+ shadowOpacity: 0,
95
+ backgroundColor: theme.colors.primary,
96
+ borderWidth: 0,
84
97
  },
85
98
  reorderbutton: {
86
99
  height: 23,
@@ -118,19 +131,29 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
118
131
  });
119
132
 
120
133
  const handleReorderClick = (order: any) => {
121
- if (carts[`businessId:${order?.business_id}`] && carts[`businessId:${order?.business_id}`]?.products?.length > 0) {
134
+ setReorderSelected(null)
135
+ reorderSelected = null
136
+ const isMultiOrders = Array.isArray(order?.id)
137
+
138
+ const isRemoveCart = isMultiOrders
139
+ ? order?.business_id?.some((businessId: any) => !!carts[`businessId:${businessId}`]?.uuid)
140
+ : carts[`businessId:${order?.business_id}`] && !!carts[`businessId:${order?.business_id}`]?.uuid
141
+
142
+ if (isRemoveCart) {
122
143
  setConfirm({
123
144
  open: true,
124
145
  content: [t('QUESTION_DELETE_PRODUCTS_FROM_CART', 'Are you sure that you want to delete all products from cart?')],
125
146
  title: t('ORDER', 'Order'),
126
147
  handleOnAccept: async () => {
127
- handleRemoveCart()
148
+ handleRemoveCart(order)
128
149
  setConfirm({ ...confirm, open: false })
129
150
  }
130
151
  })
131
152
  } else {
132
- setReorderSelected(order?.id);
133
- handleReorder && handleReorder(order?.id);
153
+ const orderId = Array.isArray(order?.id) ? order?.id[0] : order?.id
154
+ setReorderSelected(orderId)
155
+ reorderSelected = orderId
156
+ handleReorder && handleReorder(order?.id)
134
157
  }
135
158
  };
136
159
 
@@ -141,11 +164,12 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
141
164
  order: {
142
165
  id: order?.id,
143
166
  business_id: order?.business_id,
144
- logo: order?.business?.logo,
167
+ logo: order?.business?.length > 1 ? order?.business?.map?.((business: any) => business?.logo) : order?.business?.logo,
145
168
  driver: order?.driver,
146
169
  products: order?.products,
147
170
  review: order?.review,
148
- user_review: order?.user_review
171
+ user_review: order?.user_review,
172
+ business: order?.business
149
173
  },
150
174
  });
151
175
  return
@@ -158,13 +182,16 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
158
182
  onNavigationRedirect('OrderDetails', { orderId: order?.uuid });
159
183
  };
160
184
 
161
- const handleClickViewOrder = (uuid: string) => {
185
+ const handleClickViewOrder = (order: any) => {
162
186
  if (isMessageView) {
163
187
  handleClickOrder(order?.uuid)
164
188
  return
165
189
  }
166
- onNavigationRedirect &&
167
- onNavigationRedirect('OrderDetails', { orderId: uuid });
190
+ if (order?.cart_group_id) {
191
+ onNavigationRedirect?.('MultiOrdersDetails', { orderId: order?.cart_group_id });
192
+ } else {
193
+ onNavigationRedirect?.('OrderDetails', { orderId: order?.uuid });
194
+ }
168
195
  };
169
196
 
170
197
  const handleChangeFavorite = () => {
@@ -173,33 +200,75 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
173
200
 
174
201
  const handleOriginalReorder = () => {
175
202
  setConfirm({ ...confirm, open: false, title: null })
176
- setReorderSelected(order?.id);
177
- handleReorder && handleReorder(order?.id);
178
203
  }
179
204
 
205
+ const hideBusinessLogo = theme?.orders?.components?.business_logo?.hidden
206
+ const hideDate = theme?.orders?.components?.date?.hidden
207
+ const hideBusinessName = theme?.orders?.components?.business_name?.hidden
208
+ const hideOrderNumber = theme?.orders?.components?.order_number?.hidden
209
+ const hideReviewOrderButton = theme?.orders?.components?.review_order_button?.hidden
210
+ const hideReorderButton = theme?.orders?.components?.reorder_button?.hidden
211
+ const hideFavorite = theme?.orders?.components?.favorite?.hidden
212
+ const hideOrderStatus = theme?.orders?.components?.order_status?.hidden
213
+
214
+ useEffect(() => {
215
+ if (isFocused) setReorderSelected(null)
216
+ }, [isFocused])
217
+
180
218
  return (
181
219
  <>
182
220
  <CardAnimation
183
- onClick={() => handleClickViewOrder(order?.uuid)}
221
+ onClick={() => handleClickViewOrder(order)}
184
222
  style={[styles.container]}
185
223
  >
186
224
  <InnerContainer>
187
- {(!!order.business?.logo || theme?.images?.dummies?.businessLogo) && (
188
- <Logo style={styles.logoWrapper}>
189
- <OIcon
190
- url={optimizeImage(order.business?.logo, 'h_300,c_limit')}
191
- src={optimizeImage(!order.business?.logo && theme?.images?.dummies?.businessLogo, 'h_300,c_limit')}
192
- style={styles.logo}
193
- />
194
- </Logo>
225
+ {!hideBusinessLogo && (!!order.business?.logo || theme?.images?.dummies?.businessLogo) && (
226
+ <>
227
+ {order?.business?.length > 1 ? (
228
+ <MultiLogosContainer>
229
+ {order?.business?.map((business: any, i: number) => i < 2 && (
230
+ <Logo
231
+ isMulti
232
+ key={business?.id}
233
+ style={styles.logoWrapper}
234
+ >
235
+ <FastImage
236
+ style={styles.minilogo}
237
+ source={business?.logo ? {
238
+ uri: optimizeImage(business?.logo, 'h_300,c_limit'),
239
+ priority: FastImage.priority.normal,
240
+ } : theme?.images?.dummies?.businessLogo}
241
+ resizeMode={FastImage.resizeMode.contain}
242
+ />
243
+ </Logo>
244
+ ))}
245
+ {order?.business?.length > 1 && (order?.business?.length - 2) > 0 && (
246
+ <OText mRight={3}> + {order?.business?.length - 2}</OText>
247
+ )}
248
+ </MultiLogosContainer>
249
+ ) : (
250
+ <Logo style={styles.logoWrapper}>
251
+ <FastImage
252
+ style={styles.logo}
253
+ source={order.business?.logo ? {
254
+ uri: optimizeImage(order.business?.logo, 'h_300,c_limit'),
255
+ priority: FastImage.priority.normal,
256
+ } : theme?.images?.dummies?.businessLogo}
257
+ resizeMode={FastImage.resizeMode.contain}
258
+ />
259
+ </Logo>
260
+ )}
261
+ </>
195
262
  )}
196
263
  <CardInfoWrapper>
197
264
  <ContentHeader>
198
- <View style={{ flex: 1 }}>
199
- <OText size={12} lineHeight={18} weight={'600'} numberOfLines={1} ellipsizeMode={'tail'}>
200
- {order.business?.name}
201
- </OText>
202
- </View>
265
+ {(order?.business?.length > 1 && !hideOrderNumber) || (!order?.business?.length && !hideBusinessName) && (
266
+ <View style={{ flex: 1 }}>
267
+ <OText size={12} lineHeight={18} weight={'600'} numberOfLines={1} ellipsizeMode={'tail'}>
268
+ {order?.business?.length > 1 ? `${t('GROUP_ORDER', 'Group Order')} ${t('No', 'No')}. ${order?.cart_group_id}` : order.business?.name}
269
+ </OText>
270
+ </View>
271
+ )}
203
272
  {!!!pastOrders && (
204
273
  <>
205
274
  {isMessageView ? (
@@ -223,7 +292,8 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
223
292
  )}
224
293
  {!!pastOrders && (
225
294
  <ButtonWrapper>
226
- {allowedOrderStatus.includes(parseInt(order?.status)) &&
295
+ {!hideReviewOrderButton &&
296
+ allowedOrderStatus.includes(parseInt(order?.status)) &&
227
297
  !order.review && (
228
298
  <TouchableOpacity
229
299
  onPress={() => handleClickOrderReview(order)}
@@ -233,7 +303,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
233
303
  </OText>
234
304
  </TouchableOpacity>
235
305
  )}
236
- {order.cart && (
306
+ {!hideReorderButton && typeof order?.id === 'number' && (
237
307
  <OButton
238
308
  text={t('REORDER', 'Reorder')}
239
309
  imgRightSrc={''}
@@ -253,7 +323,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
253
323
  <ContentFooter>
254
324
  <View style={{ flex: 1 }}>
255
325
  <View style={styles.infoText}>
256
- {!!!pastOrders && (
326
+ {(!!!pastOrders || order?.business?.length > 1) && !hideOrderNumber && (
257
327
  <>
258
328
  <OText
259
329
  size={10}
@@ -263,7 +333,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
263
333
  lineHeight={15}
264
334
  numberOfLines={1}
265
335
  >
266
- {t('ORDER_NO', 'Order No') + '.'}
336
+ {order?.business?.length > 1 ? order?.business?.length : (t('ORDER_NO', 'Order No') + '.')}
267
337
  </OText>
268
338
  <OText
269
339
  size={10}
@@ -272,37 +342,41 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
272
342
  lineHeight={15}
273
343
  numberOfLines={1}
274
344
  >
275
- {order.id + ` \u2022 `}
345
+ {order?.business?.length > 1 ? t('ORDERS', 'orders') + ' \u2022 ' : order.id + ` \u2022 `}
276
346
  </OText>
277
347
  </>
278
348
  )}
349
+ {!hideDate && (
350
+ <OText
351
+ size={10}
352
+ lineHeight={15}
353
+ color={theme.colors.textSecondary}
354
+ style={{ marginVertical: 3 }}
355
+ numberOfLines={1}>
356
+ {
357
+ pastOrders
358
+ ? order?.delivery_datetime_utc ? parseDate(order?.delivery_datetime_utc) : parseDate(order?.delivery_datetime, { utc: false })
359
+ : <OrderEta order={order} />
360
+ }
361
+ </OText>
362
+ )}
363
+ </View>
364
+ {!hideOrderStatus && (
279
365
  <OText
366
+ color={theme.colors.primary}
280
367
  size={10}
281
368
  lineHeight={15}
282
- color={theme.colors.textSecondary}
283
- style={{ marginVertical: 3 }}
284
369
  numberOfLines={1}>
285
- {
286
- pastOrders
287
- ? order?.delivery_datetime_utc ? parseDate(order?.delivery_datetime_utc) : parseDate(order?.delivery_datetime, { utc: false })
288
- : order?.eta_time + 'min'
289
- }
370
+ {getOrderStatus(order.status)?.value}
290
371
  </OText>
291
- </View>
292
- <OText
293
- color={theme.colors.primary}
294
- size={10}
295
- lineHeight={15}
296
- numberOfLines={1}>
297
- {getOrderStatus(order.status)?.value}
298
- </OText>
372
+ )}
299
373
  </View>
300
- {!isMessageView && (
374
+ {!isMessageView && !order?.business?.length && !hideFavorite && (
301
375
  <LottieAnimation
302
376
  type='favorite'
303
377
  onClick={handleChangeFavorite}
304
- initialValue={order?.favorite ? 0.75 : 0}
305
- toValue={order?.favorite ? 0 : 0.75}
378
+ initialValue={order?.favorite ? 0.5 : 0}
379
+ toValue={order?.favorite ? 0 : 0.5}
306
380
  style={{ marginBottom: 5 }}
307
381
  iconProps={{ color: theme.colors.danger5, size: 16, style: { top: 7 } }}
308
382
  isActive={order?.favorite}
@@ -1,4 +1,4 @@
1
- import styled from 'styled-components/native'
1
+ import styled, { css } from 'styled-components/native'
2
2
 
3
3
  export const InnerContainer = styled.View`
4
4
  flex-direction: row;
@@ -8,6 +8,9 @@ export const InnerContainer = styled.View`
8
8
  export const Logo = styled.View`
9
9
  border-radius: 7.6px;
10
10
  margin-right: 12px;
11
+ ${({ isMulti } : any) => isMulti && css`
12
+ margin-right: 5px;
13
+ `}
11
14
  `
12
15
 
13
16
  export const CardInfoWrapper = styled.View`
@@ -16,7 +19,7 @@ export const CardInfoWrapper = styled.View`
16
19
 
17
20
  export const ContentHeader = styled.View`
18
21
  flex-direction: row;
19
- justify-content: space-between;
22
+ justify-content: flex-end;
20
23
  `
21
24
 
22
25
  export const ButtonWrapper = styled.View`
@@ -45,3 +48,9 @@ export const Price = styled.View`
45
48
  margin-left: 10px;
46
49
  width: 30%;
47
50
  `
51
+
52
+ export const MultiLogosContainer = styled.View`
53
+ display: flex;
54
+ align-items: center;
55
+ flex-direction: row;
56
+ `
@@ -11,13 +11,13 @@ import {
11
11
  } from 'ordering-components/native';
12
12
  import { useTheme } from 'styled-components/native';
13
13
  import { SingleProductCardParams } from '../../types';
14
- import { CardInfo, SoldOut, QuantityContainer, PricesContainer, RibbonBox, LogoWrapper } from './styles';
15
- import { StyleSheet, View } from 'react-native';
14
+ import { CardInfo, SoldOut, QuantityContainer, PricesContainer, RibbonBox, LogoWrapper, TagsContainer } from './styles';
15
+ import { ScrollView, StyleSheet, TouchableWithoutFeedback, View } from 'react-native';
16
16
  import { InView } from 'react-native-intersection-observer'
17
17
  import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
18
18
  import { OButton, OIcon, OText } from '../shared';
19
19
  import FastImage from 'react-native-fast-image'
20
- import { shape } from '../../utils';
20
+ import { lightenDarkenColor, shape } from '../../utils';
21
21
  import { LottieAnimation } from '../LottieAnimation';
22
22
  import { CardAnimation } from '../shared/CardAnimation'
23
23
 
@@ -39,14 +39,20 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
39
39
  enableIntersection,
40
40
  navigation,
41
41
  businessId,
42
- isPreviously
42
+ isPreviously,
43
+ viewString,
44
+ businessSingleId
43
45
  } = props;
44
46
 
45
47
  const theme = useTheme();
46
48
  const hideAddButton = theme?.business_view?.components?.products?.components?.add_to_cart_button?.hidden ?? true
47
- const isChewLayout = theme?.header?.components?.layout?.type === 'chew'
48
-
49
+ const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
50
+ const hideProductDescription = theme?.business_view?.components?.products?.components?.product?.components?.description?.hidden
51
+ const hideProductLogo = viewString
52
+ ? theme?.[viewString]?.components?.cart?.components?.products?.image?.hidden
53
+ : theme?.business_view?.components?.products?.components?.product?.components?.image?.hidden
49
54
  const textSize = isChewLayout ? 12 : 10
55
+ const logoPosition = theme?.business_view?.components?.products?.components?.product?.components?.image?.position
50
56
 
51
57
  const styles = StyleSheet.create({
52
58
  container: {
@@ -99,7 +105,12 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
99
105
  color: '#808080',
100
106
  textDecorationLine: 'line-through',
101
107
  marginLeft: 7,
102
- marginRight: 7
108
+ marginRight: 0
109
+ },
110
+ productTagsStyle: {
111
+ width: 30,
112
+ height: 30,
113
+ marginRight: 5
103
114
  }
104
115
  });
105
116
 
@@ -158,7 +169,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
158
169
  }
159
170
 
160
171
  return (
161
- <InView style={{ minHeight: hideAddButton ? 125 : 190 }} triggerOnce={true} onChange={(inView: boolean) => handleChangeIntersection()}>
172
+ <InView style={{ minHeight: hideAddButton ? 125 : 190, marginLeft: logoPosition === 'left' ? 12.5 : 0 }} triggerOnce={true} onChange={(inView: boolean) => handleChangeIntersection()}>
162
173
  {isIntersectionObserver ? (
163
174
  <CardAnimation
164
175
  onClick={() => handleClickproduct()}
@@ -168,10 +179,10 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
168
179
  (style && { ...style })
169
180
  ]}
170
181
  >
171
- <View style={{ flexDirection: 'row' }}>
182
+ <View style={{ flexDirection: logoPosition === 'left' ? 'row-reverse' : 'row' }}>
172
183
  {productAddedToCartLength > 0 && (
173
- <QuantityContainer style={[styles.quantityContainer, {
174
- transform: [{ translateX: 25 }, { translateY: -25 }],
184
+ <QuantityContainer businessSingleId={businessSingleId} style={[styles.quantityContainer, {
185
+ transform: [{ translateX: logoPosition === 'right' ? 25 : -25 }, { translateY: -25 }],
175
186
  }]}>
176
187
  <OText size={12} color={theme.colors.white}>{productAddedToCartLength.toString()}</OText>
177
188
  </QuantityContainer>
@@ -190,8 +201,8 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
190
201
  <LottieAnimation
191
202
  type='favorite'
192
203
  onClick={handleChangeFavorite}
193
- initialValue={product?.favorite ? 0.75 : 0}
194
- toValue={product?.favorite ? 0 : 0.75}
204
+ initialValue={product?.favorite ? 0.5 : 0}
205
+ toValue={product?.favorite ? 0 : 0.5}
195
206
  disableAnimation={!auth}
196
207
  iconProps={{ color: theme.colors.danger5, size: 18 }}
197
208
  isActive={product?.favorite}
@@ -205,15 +216,41 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
205
216
  {product?.offer_price !== null && !!product?.in_offer && (
206
217
  <OText style={styles.regularPriceStyle}>{product?.offer_price ? parsePrice(product?.offer_price) : ''}</OText>
207
218
  )}
219
+ {!isPreviously && product?.tags && product?.tags.length > 0 && (
220
+ <ScrollView
221
+ showsVerticalScrollIndicator={false}
222
+ showsHorizontalScrollIndicator={false}
223
+ horizontal
224
+ style={{ marginLeft: 10 }}
225
+ contentContainerStyle={{ flexGrow: 1 }}
226
+ >
227
+ {product?.tags.map((tag: any, i: any) => (
228
+ <TouchableWithoutFeedback key={i}>
229
+ <TagsContainer>
230
+ <FastImage
231
+ style={styles.productTagsStyle}
232
+ source={tag.image ? {
233
+ uri: optimizeImage(tag.image, 'h_250,c_limit'),
234
+ priority: FastImage.priority.normal,
235
+ } : theme?.images?.dummies?.product}
236
+ resizeMode={FastImage.resizeMode.cover}
237
+ />
238
+ </TagsContainer>
239
+ </TouchableWithoutFeedback>
240
+ ))}
241
+ </ScrollView>
242
+ )}
208
243
  </PricesContainer>
209
- <OText
210
- size={textSize}
211
- numberOfLines={!isPreviously ? 2 : 1}
212
- ellipsizeMode="tail"
213
- color={theme.colors.textSecondary}
214
- style={styles.line15}>
215
- {product?.description}
216
- </OText>
244
+ {!hideProductDescription && (
245
+ <OText
246
+ size={textSize}
247
+ numberOfLines={!isPreviously ? 2 : 1}
248
+ ellipsizeMode="tail"
249
+ color={theme.colors.textSecondary}
250
+ style={styles.line15}>
251
+ {product?.description}
252
+ </OText>
253
+ )}
217
254
  {isPreviously && (
218
255
  <OText
219
256
  size={textSize}
@@ -225,17 +262,19 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
225
262
  </OText>
226
263
  )}
227
264
  </CardInfo>
228
- <LogoWrapper>
265
+ <LogoWrapper logoPosition={logoPosition}>
229
266
  {!!product?.ribbon?.enabled && (
230
267
  <RibbonBox
231
268
  bgColor={product?.ribbon?.color}
269
+ colorText={lightenDarkenColor(product?.ribbon?.color)}
270
+ borderRibbon={lightenDarkenColor(product?.ribbon?.color)}
232
271
  isRoundRect={product?.ribbon?.shape === shape?.rectangleRound}
233
272
  isCapsule={product?.ribbon?.shape === shape?.capsuleShape}
234
273
  >
235
274
  <OText
236
275
  size={textSize}
237
276
  weight={'400'}
238
- color={theme.colors.white}
277
+ color={lightenDarkenColor(product?.ribbon?.color) ? theme.colors.black : theme.colors.white}
239
278
  numberOfLines={2}
240
279
  ellipsizeMode='tail'
241
280
  lineHeight={13}
@@ -244,14 +283,16 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
244
283
  </OText>
245
284
  </RibbonBox>
246
285
  )}
247
- <FastImage
248
- style={styles.productStyle}
249
- source={product?.images ? {
250
- uri: optimizeImage(product?.images, 'h_250,c_limit'),
251
- priority: FastImage.priority.normal,
252
- } : theme?.images?.dummies?.product}
253
- resizeMode={FastImage.resizeMode.cover}
254
- />
286
+ {!hideProductLogo && (
287
+ <FastImage
288
+ style={styles.productStyle}
289
+ source={product?.images ? {
290
+ uri: optimizeImage(product?.images, 'h_250,c_limit'),
291
+ priority: FastImage.priority.normal,
292
+ } : theme?.images?.dummies?.product}
293
+ resizeMode={FastImage.resizeMode.cover}
294
+ />
295
+ )}
255
296
  </LogoWrapper>
256
297
 
257
298
  {(isSoldOut || maxProductQuantity <= 0) && (
@@ -27,7 +27,18 @@ export const PricesContainer = styled.View`
27
27
 
28
28
  export const LogoWrapper = styled.View`
29
29
  position: relative;
30
- margin-left: 12px;
30
+ margin-left: ${(props) => !props.logoPosition || props.logoPosition === 'right' ? '12px' : '0px'};
31
+ margin-right: ${(props) => props.logoPosition === 'right' ? '0px' : '12px'};
32
+ `
33
+ export const WrapTags = styled.View`
34
+ display: flex;
35
+ flex-direction: row;
36
+ justify-content: flex-start;
37
+ margin-left: 10px;
38
+ `
39
+ export const TagsContainer = styled.View`
40
+ display: flex;
41
+ margin: auto;
31
42
  `
32
43
 
33
44
  export const RibbonBox = styled.View`
@@ -38,16 +49,21 @@ export const RibbonBox = styled.View`
38
49
  background-color: ${(props: any) => props.theme.colors.primary};
39
50
  padding: 1px 8px;
40
51
  max-width: 60px;
41
-
42
52
  ${(props: any) => props.bgColor && css`
43
53
  background-color: ${props.bgColor};
44
54
  `}
45
-
46
55
  ${(props: any) => props.isRoundRect && css`
47
56
  border-radius: 7.6px;
48
57
  `}
49
-
50
58
  ${(props: any) => props.isCapsule && css`
51
59
  border-radius: 50px;
52
60
  `}
61
+
62
+ ${(props: any) => props.colorText && css`
63
+ color: ${props.colorText ? 'black' : 'white'};
64
+ `}
65
+
66
+ ${(props: any) => props.borderRibbon && css`
67
+ border: 1px solid ${props.borderRibbon ? 'black' : 'white'};
68
+ `}
53
69
  `
@@ -19,7 +19,7 @@ export const LogoWrapper = styled.View`
19
19
  shadowRadius: 3;
20
20
  shadowOffset: { width: 1, height: 4 };
21
21
  elevation: 3;
22
- borderRadius: 8;
22
+ border-radius: 8;
23
23
  shadowOpacity: 0.1;
24
24
  overflow: hidden;
25
25
  width: 80;