ordering-ui-react-native 0.17.35 → 0.17.36-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 (215) hide show
  1. package/package.json +8 -7
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessesListing/index.tsx +1 -1
  4. package/src/components/OrderCreating/index.tsx +1 -21
  5. package/src/components/PaymentOptionsWebView/index.tsx +29 -8
  6. package/src/components/StripeMethodForm/index.tsx +108 -79
  7. package/src/components/VerifyPhone/styles.tsx +1 -2
  8. package/src/components/shared/OToast.tsx +4 -4
  9. package/src/types/index.tsx +5 -0
  10. package/src/utils/index.tsx +7 -1
  11. package/themes/business/index.tsx +2 -0
  12. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +265 -240
  13. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  14. package/themes/business/src/components/BusinessController/index.tsx +0 -1
  15. package/themes/business/src/components/Chat/index.tsx +118 -107
  16. package/themes/business/src/components/DriverMap/index.tsx +17 -6
  17. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  18. package/themes/business/src/components/LoginForm/Otp/index.tsx +120 -0
  19. package/themes/business/src/components/LoginForm/Otp/styles.tsx +7 -0
  20. package/themes/business/src/components/LoginForm/index.tsx +238 -80
  21. package/themes/business/src/components/LoginForm/styles.tsx +10 -0
  22. package/themes/business/src/components/MapView/index.tsx +10 -10
  23. package/themes/business/src/components/NewOrderNotification/index.tsx +43 -50
  24. package/themes/business/src/components/OrderDetails/Delivery.tsx +4 -3
  25. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +90 -47
  26. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +59 -62
  27. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
  28. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  29. package/themes/business/src/components/OrderMessage/index.tsx +18 -17
  30. package/themes/business/src/components/OrderSummary/index.tsx +113 -121
  31. package/themes/business/src/components/OrdersOption/index.tsx +32 -75
  32. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  33. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  34. package/themes/business/src/components/PreviousOrders/index.tsx +445 -243
  35. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  36. package/themes/business/src/components/ProductItemAccordion/index.tsx +27 -3
  37. package/themes/business/src/components/ReviewCustomer/index.tsx +41 -24
  38. package/themes/business/src/components/StoresList/index.tsx +2 -2
  39. package/themes/business/src/components/shared/OLink.tsx +33 -13
  40. package/themes/business/src/components/shared/OModal.tsx +16 -9
  41. package/themes/business/src/components/shared/OText.tsx +8 -2
  42. package/themes/business/src/types/index.tsx +32 -2
  43. package/themes/business/src/utils/index.tsx +44 -1
  44. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  45. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  46. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  47. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  48. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  49. package/themes/kiosk/src/components/LoginForm/Otp/index.tsx +92 -0
  50. package/themes/kiosk/src/components/LoginForm/Otp/styles.tsx +7 -0
  51. package/themes/kiosk/src/components/LoginForm/index.tsx +473 -151
  52. package/themes/kiosk/src/components/LoginForm/styles.tsx +14 -1
  53. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  54. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  55. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  56. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +3 -2
  57. package/themes/kiosk/src/components/PhoneInputNumber/styles.tsx +1 -3
  58. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  59. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  60. package/themes/kiosk/src/components/shared/OModal.tsx +14 -11
  61. package/themes/kiosk/src/layouts/Container.tsx +7 -1
  62. package/themes/kiosk/src/types/index.d.ts +13 -0
  63. package/themes/kiosk/src/utils/index.tsx +15 -0
  64. package/themes/original/index.tsx +6 -0
  65. package/themes/original/src/components/AddressDetails/index.tsx +29 -11
  66. package/themes/original/src/components/AddressForm/index.tsx +85 -49
  67. package/themes/original/src/components/AddressList/index.tsx +26 -21
  68. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  69. package/themes/original/src/components/AnalyticsSegment/index.tsx +193 -10
  70. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  71. package/themes/original/src/components/BusinessBasicInformation/index.tsx +159 -90
  72. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +9 -7
  73. package/themes/original/src/components/BusinessController/index.tsx +154 -68
  74. package/themes/original/src/components/BusinessController/styles.tsx +22 -9
  75. package/themes/original/src/components/BusinessFeaturedController/index.tsx +21 -54
  76. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +8 -0
  77. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  78. package/themes/original/src/components/BusinessItemAccordion/index.tsx +23 -22
  79. package/themes/original/src/components/BusinessListingSearch/index.tsx +351 -326
  80. package/themes/original/src/components/BusinessPreorder/index.tsx +97 -16
  81. package/themes/original/src/components/BusinessProductsList/index.tsx +20 -11
  82. package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
  83. package/themes/original/src/components/BusinessProductsListing/UpsellingRedirect.tsx +1 -1
  84. package/themes/original/src/components/BusinessProductsListing/index.tsx +684 -524
  85. package/themes/original/src/components/BusinessProductsListing/styles.tsx +4 -6
  86. package/themes/original/src/components/BusinessReviews/index.tsx +3 -1
  87. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  88. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +106 -79
  89. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  90. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  91. package/themes/original/src/components/Cart/index.tsx +102 -69
  92. package/themes/original/src/components/CartContent/index.tsx +115 -19
  93. package/themes/original/src/components/CartContent/styles.tsx +17 -7
  94. package/themes/original/src/components/Checkout/index.tsx +375 -179
  95. package/themes/original/src/components/Checkout/styles.tsx +4 -2
  96. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  97. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  98. package/themes/original/src/components/CouponControl/index.tsx +10 -3
  99. package/themes/original/src/components/DriverTips/index.tsx +52 -34
  100. package/themes/original/src/components/Favorite/index.tsx +7 -4
  101. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  102. package/themes/original/src/components/FavoriteList/index.tsx +51 -80
  103. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  104. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  105. package/themes/original/src/components/GPSButton/index.tsx +6 -4
  106. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  107. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +96 -0
  108. package/themes/original/src/components/GiftCard/GiftCardUI/styles.tsx +5 -0
  109. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +100 -0
  110. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +8 -0
  111. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +191 -0
  112. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +8 -0
  113. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +165 -0
  114. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +9 -0
  115. package/themes/original/src/components/GoogleMap/index.tsx +15 -4
  116. package/themes/original/src/components/Help/index.tsx +8 -8
  117. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +11 -22
  118. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  119. package/themes/original/src/components/HelpGuide/index.tsx +12 -16
  120. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  121. package/themes/original/src/components/HelpOrder/index.tsx +12 -25
  122. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  123. package/themes/original/src/components/Home/index.tsx +13 -4
  124. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  125. package/themes/original/src/components/LoginForm/Otp/index.tsx +139 -75
  126. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  127. package/themes/original/src/components/LoginForm/index.tsx +71 -28
  128. package/themes/original/src/components/LottieAnimation/index.tsx +103 -0
  129. package/themes/original/src/components/MessageListing/index.tsx +16 -42
  130. package/themes/original/src/components/Messages/index.tsx +32 -10
  131. package/themes/original/src/components/MomentOption/index.tsx +195 -88
  132. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  133. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +197 -116
  134. package/themes/original/src/components/MultiCheckout/index.tsx +298 -88
  135. package/themes/original/src/components/MultiCheckout/styles.tsx +3 -1
  136. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  137. package/themes/original/src/components/MultiOrdersDetails/index.tsx +68 -21
  138. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  139. package/themes/original/src/components/MyOrders/index.tsx +53 -51
  140. package/themes/original/src/components/NavBar/index.tsx +18 -18
  141. package/themes/original/src/components/NotFoundSource/index.tsx +14 -10
  142. package/themes/original/src/components/Notifications/index.tsx +46 -50
  143. package/themes/original/src/components/Notifications/styles.tsx +6 -3
  144. package/themes/original/src/components/OrderDetails/OrderEta.tsx +76 -0
  145. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +15 -3
  146. package/themes/original/src/components/OrderDetails/index.tsx +199 -359
  147. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  148. package/themes/original/src/components/OrderItAgain/index.tsx +3 -1
  149. package/themes/original/src/components/OrderProgress/index.tsx +93 -114
  150. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  151. package/themes/original/src/components/OrderSummary/index.tsx +87 -59
  152. package/themes/original/src/components/OrderTypeSelector/index.tsx +1 -1
  153. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +24 -19
  154. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +14 -14
  155. package/themes/original/src/components/OrdersOption/index.tsx +70 -65
  156. package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
  157. package/themes/original/src/components/PageBanner/index.tsx +171 -0
  158. package/themes/original/src/components/PageBanner/styles.tsx +11 -0
  159. package/themes/original/src/components/PaymentOptionCard/index.tsx +180 -0
  160. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  161. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  162. package/themes/original/src/components/PaymentOptions/index.tsx +58 -7
  163. package/themes/original/src/components/PhoneInputNumber/index.tsx +3 -3
  164. package/themes/original/src/components/PlaceSpot/index.tsx +12 -6
  165. package/themes/original/src/components/ProductForm/index.tsx +223 -232
  166. package/themes/original/src/components/ProductForm/styles.tsx +5 -8
  167. package/themes/original/src/components/ProductItemAccordion/index.tsx +59 -29
  168. package/themes/original/src/components/ProductOptionSubOption/index.tsx +19 -11
  169. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
  170. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  171. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -50
  172. package/themes/original/src/components/ProfessionalProfile/index.tsx +36 -7
  173. package/themes/original/src/components/Promotions/index.tsx +234 -220
  174. package/themes/original/src/components/Promotions/styles.tsx +10 -3
  175. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  176. package/themes/original/src/components/ReviewOrder/index.tsx +26 -9
  177. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  178. package/themes/original/src/components/ReviewProducts/index.tsx +23 -11
  179. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  180. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  181. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  182. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  183. package/themes/original/src/components/ServiceForm/index.tsx +74 -19
  184. package/themes/original/src/components/Sessions/index.tsx +11 -8
  185. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  186. package/themes/original/src/components/SignupForm/index.tsx +42 -19
  187. package/themes/original/src/components/SingleOrderCard/index.tsx +156 -65
  188. package/themes/original/src/components/SingleOrderCard/styles.tsx +11 -9
  189. package/themes/original/src/components/SingleProductCard/index.tsx +100 -56
  190. package/themes/original/src/components/SingleProductCard/styles.tsx +22 -13
  191. package/themes/original/src/components/SingleProductReview/styles.tsx +1 -1
  192. package/themes/original/src/components/StripeCardsList/index.tsx +13 -3
  193. package/themes/original/src/components/StripeElementsForm/index.tsx +28 -15
  194. package/themes/original/src/components/UpsellingProducts/index.tsx +238 -224
  195. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  196. package/themes/original/src/components/UserDetails/index.tsx +8 -4
  197. package/themes/original/src/components/UserFormDetails/index.tsx +47 -7
  198. package/themes/original/src/components/UserProfile/index.tsx +5 -7
  199. package/themes/original/src/components/UserProfileForm/index.tsx +25 -28
  200. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  201. package/themes/original/src/components/WalletTransactionItem/index.tsx +2 -2
  202. package/themes/original/src/components/WalletTransactions/index.tsx +3 -3
  203. package/themes/original/src/components/Wallets/index.tsx +79 -36
  204. package/themes/original/src/components/Wallets/styles.tsx +5 -4
  205. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  206. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  207. package/themes/original/src/components/shared/OBottomPopup.tsx +1 -1
  208. package/themes/original/src/components/shared/OButton.tsx +6 -2
  209. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  210. package/themes/original/src/components/shared/OInput.tsx +16 -2
  211. package/themes/original/src/components/shared/OModal.tsx +3 -3
  212. package/themes/original/src/layouts/Container.tsx +13 -9
  213. package/themes/original/src/types/index.tsx +38 -9
  214. package/themes/original/src/utils/index.tsx +364 -58
  215. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,19 +1,19 @@
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
- import IconAntDesign from 'react-native-vector-icons/AntDesign'
12
12
  import { SingleOrderCardParams } from '../../types';
13
13
  import { OAlert } from '../../../../../src/components/shared'
14
-
14
+ import { OrderEta } from '../OrderDetails/OrderEta'
15
+ import { useIsFocused } from '@react-navigation/native';
15
16
  import {
16
- Container,
17
17
  InnerContainer,
18
18
  Logo,
19
19
  CardInfoWrapper,
@@ -21,8 +21,11 @@ import {
21
21
  ButtonWrapper,
22
22
  ContentFooter,
23
23
  UnreadMessageCounter,
24
- Price
24
+ Price,
25
+ MultiLogosContainer
25
26
  } from './styles';
27
+ import { LottieAnimation } from '../LottieAnimation';
28
+ import { CardAnimation } from '../shared/CardAnimation';
26
29
 
27
30
  const SingleOrderCardUI = (props: SingleOrderCardParams) => {
28
31
  const {
@@ -43,18 +46,30 @@ 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 })
53
+ const [isPressed, setIsPressed] = useState(false)
49
54
 
50
- const allowedOrderStatus = [1, 2, 5, 6, 10, 11, 12];
55
+ const allowedOrderStatus = [1, 2, 5, 6, 10, 11, 12, 15];
51
56
 
52
57
  const styles = StyleSheet.create({
58
+ container: {
59
+ borderRadius: 7.6,
60
+ marginBottom: 10,
61
+ paddingVertical: 5,
62
+ },
53
63
  logo: {
54
64
  borderRadius: 8,
55
65
  width: 64,
56
66
  height: 64
57
67
  },
68
+ minilogo: {
69
+ borderRadius: 8,
70
+ width: 40,
71
+ height: 40
72
+ },
58
73
  logoWrapper: {
59
74
  overflow: 'hidden',
60
75
  backgroundColor: 'white',
@@ -72,9 +87,13 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
72
87
  marginRight: 2,
73
88
  },
74
89
  reorderLoading: {
75
- width: 80,
76
- height: 40,
77
- 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,
78
97
  },
79
98
  reorderbutton: {
80
99
  height: 23,
@@ -100,23 +119,41 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
100
119
  infoText: {
101
120
  flexDirection: 'row',
102
121
  alignItems: 'center'
122
+ },
123
+ cardAnimation: {
124
+ elevation: isPressed ? 2 : 0,
125
+ shadowColor: '#888',
126
+ shadowOffset: { width: 0, height: isPressed ? 2 : 0 },
127
+ shadowRadius: 18,
128
+ shadowOpacity: isPressed ? 0.8 : 0,
129
+ borderRadius: 12,
103
130
  }
104
131
  });
105
132
 
106
133
  const handleReorderClick = (order: any) => {
107
- 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) {
108
143
  setConfirm({
109
144
  open: true,
110
145
  content: [t('QUESTION_DELETE_PRODUCTS_FROM_CART', 'Are you sure that you want to delete all products from cart?')],
111
146
  title: t('ORDER', 'Order'),
112
147
  handleOnAccept: async () => {
113
- handleRemoveCart()
148
+ handleRemoveCart(order)
114
149
  setConfirm({ ...confirm, open: false })
115
150
  }
116
151
  })
117
152
  } else {
118
- setReorderSelected(order?.id);
119
- 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)
120
157
  }
121
158
  };
122
159
 
@@ -127,11 +164,12 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
127
164
  order: {
128
165
  id: order?.id,
129
166
  business_id: order?.business_id,
130
- logo: order?.business?.logo,
167
+ logo: order?.business?.length > 1 ? order?.business?.map?.((business: any) => business?.logo) : order?.business?.logo,
131
168
  driver: order?.driver,
132
169
  products: order?.products,
133
170
  review: order?.review,
134
- user_review: order?.user_review
171
+ user_review: order?.user_review,
172
+ business: order?.business
135
173
  },
136
174
  });
137
175
  return
@@ -144,13 +182,16 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
144
182
  onNavigationRedirect('OrderDetails', { orderId: order?.uuid });
145
183
  };
146
184
 
147
- const handleClickViewOrder = (uuid: string) => {
185
+ const handleClickViewOrder = (order: any) => {
148
186
  if (isMessageView) {
149
187
  handleClickOrder(order?.uuid)
150
188
  return
151
189
  }
152
- onNavigationRedirect &&
153
- 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
+ }
154
195
  };
155
196
 
156
197
  const handleChangeFavorite = () => {
@@ -159,33 +200,75 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
159
200
 
160
201
  const handleOriginalReorder = () => {
161
202
  setConfirm({ ...confirm, open: false, title: null })
162
- setReorderSelected(order?.id);
163
- handleReorder && handleReorder(order?.id);
164
203
  }
165
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
+
166
218
  return (
167
219
  <>
168
- <Container
169
- onPress={() => handleClickViewOrder(order?.uuid)}
170
- activeOpacity={0.7}
220
+ <CardAnimation
221
+ onClick={() => handleClickViewOrder(order)}
222
+ style={[styles.container]}
171
223
  >
172
224
  <InnerContainer>
173
- {(!!order.business?.logo || theme?.images?.dummies?.businessLogo) && (
174
- <Logo style={styles.logoWrapper}>
175
- <OIcon
176
- url={optimizeImage(order.business?.logo, 'h_300,c_limit')}
177
- src={optimizeImage(!order.business?.logo && theme?.images?.dummies?.businessLogo, 'h_300,c_limit')}
178
- style={styles.logo}
179
- />
180
- </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
+ </>
181
262
  )}
182
263
  <CardInfoWrapper>
183
264
  <ContentHeader>
184
- <View style={{ flex: 1 }}>
185
- <OText size={12} lineHeight={18} weight={'600'} numberOfLines={1} ellipsizeMode={'tail'}>
186
- {order.business?.name}
187
- </OText>
188
- </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
+ )}
189
272
  {!!!pastOrders && (
190
273
  <>
191
274
  {isMessageView ? (
@@ -209,7 +292,8 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
209
292
  )}
210
293
  {!!pastOrders && (
211
294
  <ButtonWrapper>
212
- {allowedOrderStatus.includes(parseInt(order?.status)) &&
295
+ {!hideReviewOrderButton &&
296
+ allowedOrderStatus.includes(parseInt(order?.status)) &&
213
297
  !order.review && (
214
298
  <TouchableOpacity
215
299
  onPress={() => handleClickOrderReview(order)}
@@ -219,7 +303,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
219
303
  </OText>
220
304
  </TouchableOpacity>
221
305
  )}
222
- {order.cart && (
306
+ {!hideReorderButton && typeof order?.id === 'number' && (
223
307
  <OButton
224
308
  text={t('REORDER', 'Reorder')}
225
309
  imgRightSrc={''}
@@ -239,7 +323,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
239
323
  <ContentFooter>
240
324
  <View style={{ flex: 1 }}>
241
325
  <View style={styles.infoText}>
242
- {!!!pastOrders && (
326
+ {(!!!pastOrders || order?.business?.length > 1) && !hideOrderNumber && (
243
327
  <>
244
328
  <OText
245
329
  size={10}
@@ -249,7 +333,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
249
333
  lineHeight={15}
250
334
  numberOfLines={1}
251
335
  >
252
- {t('ORDER_NO', 'Order No') + '.'}
336
+ {order?.business?.length > 1 ? order?.business?.length : (t('ORDER_NO', 'Order No') + '.')}
253
337
  </OText>
254
338
  <OText
255
339
  size={10}
@@ -258,43 +342,50 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
258
342
  lineHeight={15}
259
343
  numberOfLines={1}
260
344
  >
261
- {order.id + ` \u2022 `}
345
+ {order?.business?.length > 1 ? t('ORDERS', 'orders') + ' \u2022 ' : order.id + ` \u2022 `}
262
346
  </OText>
263
347
  </>
264
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 && (
265
365
  <OText
366
+ color={theme.colors.primary}
266
367
  size={10}
267
368
  lineHeight={15}
268
- color={theme.colors.textSecondary}
269
- style={{ marginVertical: 3 }}
270
369
  numberOfLines={1}>
271
- {order?.delivery_datetime_utc ? parseDate(order?.delivery_datetime_utc) : parseDate(order?.delivery_datetime, { utc: false })}
370
+ {getOrderStatus(order.status)?.value}
272
371
  </OText>
273
- </View>
274
- <OText
275
- color={theme.colors.primary}
276
- size={10}
277
- lineHeight={15}
278
- numberOfLines={1}>
279
- {getOrderStatus(order.status)?.value}
280
- </OText>
372
+ )}
281
373
  </View>
282
- {!isMessageView && (
283
- <TouchableOpacity
284
- onPress={handleChangeFavorite}
285
- style={{ marginTop: 5 }}
286
- >
287
- <IconAntDesign
288
- name={order?.favorite ? 'heart' : 'hearto'}
289
- color={theme.colors.danger5}
290
- size={16}
291
- />
292
- </TouchableOpacity>
374
+ {!isMessageView && !order?.business?.length && !hideFavorite && (
375
+ <LottieAnimation
376
+ type='favorite'
377
+ onClick={handleChangeFavorite}
378
+ initialValue={order?.favorite ? 0.5 : 0}
379
+ toValue={order?.favorite ? 0 : 0.5}
380
+ style={{ marginBottom: 5 }}
381
+ iconProps={{ color: theme.colors.danger5, size: 16, style: { top: 7 } }}
382
+ isActive={order?.favorite}
383
+ />
293
384
  )}
294
385
  </ContentFooter>
295
386
  </CardInfoWrapper>
296
387
  </InnerContainer>
297
- </Container>
388
+ </CardAnimation>
298
389
  <OAlert
299
390
  open={confirm.open}
300
391
  title={confirm.title}
@@ -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
+ `
@@ -11,14 +11,15 @@ import {
11
11
  } from 'ordering-components/native';
12
12
  import { useTheme } from 'styled-components/native';
13
13
  import { SingleProductCardParams } from '../../types';
14
- import { CardContainer, CardInfo, SoldOut, QuantityContainer, PricesContainer, RibbonBox, LogoWrapper } from './styles';
15
- 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';
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 IconAntDesign from 'react-native-vector-icons/AntDesign'
21
- import { shape } from '../../utils';
20
+ import { lightenDarkenColor, shape } from '../../utils';
21
+ import { LottieAnimation } from '../LottieAnimation';
22
+ import { CardAnimation } from '../shared/CardAnimation'
22
23
 
23
24
  function SingleProductCardPropsAreEqual(prevProps: any, nextProps: any) {
24
25
  return JSON.stringify(prevProps.product) === JSON.stringify(nextProps.product) &&
@@ -38,19 +39,34 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
38
39
  enableIntersection,
39
40
  navigation,
40
41
  businessId,
41
- isPreviously
42
+ isPreviously,
43
+ viewString,
44
+ businessSingleId
42
45
  } = props;
43
46
 
44
47
  const theme = useTheme();
45
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
46
56
 
47
57
  const styles = StyleSheet.create({
48
58
  container: {
49
59
  borderWidth: 1,
50
- borderRadius: 7.6,
51
60
  borderColor: theme.colors.border,
52
61
  marginBottom: 25,
53
- 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'
54
70
  },
55
71
  titleWrapper: {
56
72
  flexDirection: 'row',
@@ -70,8 +86,8 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
70
86
  textTransform: 'uppercase',
71
87
  },
72
88
  productStyle: {
73
- width: 75,
74
- height: 75,
89
+ width: 85,
90
+ height: 85,
75
91
  borderRadius: 7.6
76
92
  },
77
93
  quantityContainer: {
@@ -89,7 +105,12 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
89
105
  color: '#808080',
90
106
  textDecorationLine: 'line-through',
91
107
  marginLeft: 7,
92
- marginRight: 7
108
+ marginRight: 0
109
+ },
110
+ productTagsStyle: {
111
+ width: 30,
112
+ height: 30,
113
+ marginRight: 5
93
114
  }
94
115
  });
95
116
 
@@ -148,21 +169,20 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
148
169
  }
149
170
 
150
171
  return (
151
- <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()}>
152
173
  {isIntersectionObserver ? (
153
- <CardContainer
154
- showAddButton={!hideAddButton}
174
+ <CardAnimation
175
+ onClick={() => handleClickproduct()}
155
176
  style={[
156
177
  styles.container,
157
178
  (isSoldOut || maxProductQuantity <= 0) && styles.soldOutBackgroundStyle,
158
- (style && { ...style }),
179
+ (style && { ...style })
159
180
  ]}
160
- onPress={() => handleClickproduct()}
161
181
  >
162
- <View style={{ flexDirection: 'row' }}>
182
+ <View style={{ flexDirection: logoPosition === 'left' ? 'row-reverse' : 'row' }}>
163
183
  {productAddedToCartLength > 0 && (
164
- <QuantityContainer style={[styles.quantityContainer, {
165
- transform: [{ translateX: 25 }, { translateY: hideAddButton ? -25 : -55 }],
184
+ <QuantityContainer businessSingleId={businessSingleId} style={[styles.quantityContainer, {
185
+ transform: [{ translateX: logoPosition === 'right' ? 25 : -25 }, { translateY: -25 }],
166
186
  }]}>
167
187
  <OText size={12} color={theme.colors.white}>{productAddedToCartLength.toString()}</OText>
168
188
  </QuantityContainer>
@@ -170,7 +190,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
170
190
  <CardInfo>
171
191
  <View style={styles.titleWrapper}>
172
192
  <OText
173
- size={12}
193
+ size={textSize + 2}
174
194
  weight={'500'}
175
195
  numberOfLines={1}
176
196
  ellipsizeMode="tail"
@@ -178,15 +198,15 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
178
198
  {product?.name}
179
199
  </OText>
180
200
  {!isPreviously && (
181
- <TouchableOpacity
182
- onPress={handleChangeFavorite}
183
- >
184
- <IconAntDesign
185
- name={product?.favorite ? 'heart' : 'hearto'}
186
- color={theme.colors.danger5}
187
- size={18}
188
- />
189
- </TouchableOpacity>
201
+ <LottieAnimation
202
+ type='favorite'
203
+ onClick={handleChangeFavorite}
204
+ initialValue={product?.favorite ? 0.5 : 0}
205
+ toValue={product?.favorite ? 0 : 0.5}
206
+ disableAnimation={!auth}
207
+ iconProps={{ color: theme.colors.danger5, size: 18 }}
208
+ isActive={product?.favorite}
209
+ />
190
210
  )}
191
211
  </View>
192
212
  <PricesContainer>
@@ -196,18 +216,44 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
196
216
  {product?.offer_price !== null && !!product?.in_offer && (
197
217
  <OText style={styles.regularPriceStyle}>{product?.offer_price ? parsePrice(product?.offer_price) : ''}</OText>
198
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
+ )}
199
243
  </PricesContainer>
200
- <OText
201
- size={10}
202
- numberOfLines={!isPreviously ? 2 : 1}
203
- ellipsizeMode="tail"
204
- color={theme.colors.textSecondary}
205
- style={styles.line15}>
206
- {product?.description}
207
- </OText>
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
+ )}
208
254
  {isPreviously && (
209
255
  <OText
210
- size={10}
256
+ size={textSize}
211
257
  numberOfLines={1}
212
258
  ellipsizeMode="tail"
213
259
  color={theme.colors.primary}
@@ -216,17 +262,19 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
216
262
  </OText>
217
263
  )}
218
264
  </CardInfo>
219
- <LogoWrapper>
265
+ <LogoWrapper logoPosition={logoPosition}>
220
266
  {!!product?.ribbon?.enabled && (
221
267
  <RibbonBox
222
268
  bgColor={product?.ribbon?.color}
269
+ colorText={lightenDarkenColor(product?.ribbon?.color)}
270
+ borderRibbon={lightenDarkenColor(product?.ribbon?.color)}
223
271
  isRoundRect={product?.ribbon?.shape === shape?.rectangleRound}
224
272
  isCapsule={product?.ribbon?.shape === shape?.capsuleShape}
225
273
  >
226
274
  <OText
227
- size={10}
275
+ size={textSize}
228
276
  weight={'400'}
229
- color={theme.colors.white}
277
+ color={lightenDarkenColor(product?.ribbon?.color) ? theme.colors.black : theme.colors.white}
230
278
  numberOfLines={2}
231
279
  ellipsizeMode='tail'
232
280
  lineHeight={13}
@@ -235,21 +283,16 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
235
283
  </OText>
236
284
  </RibbonBox>
237
285
  )}
238
- {product?.images ? (
239
- <FastImage
240
- style={styles.productStyle}
241
- source={{
242
- uri: optimizeImage(product?.images, 'h_250,c_limit'),
243
- priority: FastImage.priority.normal,
244
- }}
245
- resizeMode={FastImage.resizeMode.cover}
246
- />
247
- ) : (
248
- <OIcon
249
- src={theme?.images?.dummies?.product}
250
- style={styles.productStyle}
251
- />
252
- )}
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
+ )}
253
296
  </LogoWrapper>
254
297
 
255
298
  {(isSoldOut || maxProductQuantity <= 0) && (
@@ -267,6 +310,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
267
310
  width: '100%',
268
311
  borderRadius: 7.6,
269
312
  marginTop: 10,
313
+ height: 40
270
314
 
271
315
  }}
272
316
  bgColor={isSoldOut ? '#B8B8B8' : theme?.colors?.white}
@@ -275,7 +319,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
275
319
  text={t('ADD', 'Add')}
276
320
  />
277
321
  )}
278
- </CardContainer>
322
+ </CardAnimation>
279
323
  ) : (
280
324
  <View style={{ marginBottom: 28, padding: 12, height: hideAddButton ? 125 : 165 }}>
281
325
  <Placeholder style={{ padding: 5 }} Animation={Fade}>