ordering-ui-react-native 0.17.13 → 0.17.14-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 (211) hide show
  1. package/package.json +5 -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 +119 -120
  6. package/src/components/StripeMethodForm/index.tsx +108 -77
  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 -7
  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 +10 -2
  65. package/themes/original/src/components/AddressDetails/index.tsx +29 -11
  66. package/themes/original/src/components/AddressForm/index.tsx +41 -16
  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 +195 -12
  70. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  71. package/themes/original/src/components/BusinessBasicInformation/index.tsx +125 -82
  72. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +9 -4
  73. package/themes/original/src/components/BusinessController/index.tsx +145 -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 +350 -323
  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/index.tsx +617 -492
  84. package/themes/original/src/components/BusinessProductsListing/styles.tsx +7 -13
  85. package/themes/original/src/components/BusinessReviews/index.tsx +3 -1
  86. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -3
  87. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  88. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +105 -78
  89. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  90. package/themes/original/src/components/BusinessesListing/index.tsx +5 -3
  91. package/themes/original/src/components/Cart/index.tsx +88 -43
  92. package/themes/original/src/components/CartContent/index.tsx +110 -19
  93. package/themes/original/src/components/CartContent/styles.tsx +15 -1
  94. package/themes/original/src/components/Checkout/index.tsx +323 -178
  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 -37
  100. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  101. package/themes/original/src/components/Favorite/index.tsx +7 -4
  102. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  103. package/themes/original/src/components/FavoriteList/index.tsx +51 -80
  104. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  105. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  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 +178 -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/Help/index.tsx +8 -8
  116. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +11 -22
  117. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  118. package/themes/original/src/components/HelpGuide/index.tsx +12 -16
  119. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  120. package/themes/original/src/components/HelpOrder/index.tsx +12 -25
  121. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  122. package/themes/original/src/components/Home/index.tsx +13 -4
  123. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  124. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  125. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  126. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  127. package/themes/original/src/components/LoginForm/index.tsx +48 -19
  128. package/themes/original/src/components/LottieAnimation/index.tsx +78 -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 +195 -116
  134. package/themes/original/src/components/MultiCheckout/index.tsx +262 -83
  135. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  136. package/themes/original/src/components/MultiOrdersDetails/index.tsx +67 -20
  137. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  138. package/themes/original/src/components/MyOrders/index.tsx +66 -17
  139. package/themes/original/src/components/NavBar/index.tsx +6 -11
  140. package/themes/original/src/components/Notifications/index.tsx +144 -0
  141. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  142. package/themes/original/src/components/OrderDetails/OrderEta.tsx +61 -0
  143. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +10 -3
  144. package/themes/original/src/components/OrderDetails/index.tsx +262 -347
  145. package/themes/original/src/components/OrderDetails/styles.tsx +10 -1
  146. package/themes/original/src/components/OrderItAgain/index.tsx +47 -43
  147. package/themes/original/src/components/OrderProgress/index.tsx +74 -112
  148. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  149. package/themes/original/src/components/OrderSummary/index.tsx +67 -29
  150. package/themes/original/src/components/OrderTypeSelector/index.tsx +3 -2
  151. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +28 -19
  152. package/themes/original/src/components/OrdersOption/index.tsx +99 -89
  153. package/themes/original/src/components/PageBanner/index.tsx +171 -0
  154. package/themes/original/src/components/PageBanner/styles.tsx +11 -0
  155. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  156. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  157. package/themes/original/src/components/PaymentOptions/index.tsx +34 -6
  158. package/themes/original/src/components/PhoneInputNumber/index.tsx +3 -3
  159. package/themes/original/src/components/PlaceSpot/index.tsx +12 -6
  160. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  161. package/themes/original/src/components/ProductForm/index.tsx +231 -253
  162. package/themes/original/src/components/ProductForm/styles.tsx +4 -7
  163. package/themes/original/src/components/ProductItemAccordion/index.tsx +197 -138
  164. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -10
  165. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
  166. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  167. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -50
  168. package/themes/original/src/components/ProfessionalProfile/index.tsx +36 -7
  169. package/themes/original/src/components/Promotions/index.tsx +234 -220
  170. package/themes/original/src/components/Promotions/styles.tsx +10 -3
  171. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  172. package/themes/original/src/components/ReviewOrder/index.tsx +26 -9
  173. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  174. package/themes/original/src/components/ReviewProducts/index.tsx +7 -4
  175. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  176. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  177. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  178. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  179. package/themes/original/src/components/ServiceForm/index.tsx +358 -275
  180. package/themes/original/src/components/Sessions/index.tsx +11 -8
  181. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  182. package/themes/original/src/components/SignupForm/index.tsx +82 -67
  183. package/themes/original/src/components/SingleOrderCard/index.tsx +148 -62
  184. package/themes/original/src/components/SingleOrderCard/styles.tsx +11 -9
  185. package/themes/original/src/components/SingleProductCard/index.tsx +99 -55
  186. package/themes/original/src/components/SingleProductCard/styles.tsx +27 -13
  187. package/themes/original/src/components/SingleProductReview/index.tsx +8 -2
  188. package/themes/original/src/components/SingleProductReview/styles.tsx +1 -1
  189. package/themes/original/src/components/StripeCardsList/index.tsx +9 -2
  190. package/themes/original/src/components/StripeElementsForm/index.tsx +28 -15
  191. package/themes/original/src/components/UpsellingProducts/index.tsx +238 -218
  192. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  193. package/themes/original/src/components/UserDetails/index.tsx +8 -4
  194. package/themes/original/src/components/UserFormDetails/index.tsx +53 -54
  195. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  196. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  197. package/themes/original/src/components/UserProfileForm/index.tsx +21 -28
  198. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  199. package/themes/original/src/components/Wallets/index.tsx +31 -17
  200. package/themes/original/src/components/Wallets/styles.tsx +2 -0
  201. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  202. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  203. package/themes/original/src/components/shared/OBottomPopup.tsx +1 -1
  204. package/themes/original/src/components/shared/OButton.tsx +6 -2
  205. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  206. package/themes/original/src/components/shared/OInput.tsx +10 -1
  207. package/themes/original/src/components/shared/OModal.tsx +3 -3
  208. package/themes/original/src/layouts/Container.tsx +13 -9
  209. package/themes/original/src/types/index.tsx +43 -9
  210. package/themes/original/src/utils/index.tsx +375 -58
  211. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -5,15 +5,14 @@ import {
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
15
  import {
16
- Container,
17
16
  InnerContainer,
18
17
  Logo,
19
18
  CardInfoWrapper,
@@ -21,8 +20,11 @@ import {
21
20
  ButtonWrapper,
22
21
  ContentFooter,
23
22
  UnreadMessageCounter,
24
- Price
23
+ Price,
24
+ MultiLogosContainer
25
25
  } from './styles';
26
+ import { LottieAnimation } from '../LottieAnimation';
27
+ import { CardAnimation } from '../shared/CardAnimation';
26
28
 
27
29
  const SingleOrderCardUI = (props: SingleOrderCardParams) => {
28
30
  const {
@@ -44,17 +46,28 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
44
46
  const [{ carts }] = useOrder()
45
47
  const theme = useTheme();
46
48
 
47
- const [reorderSelected, setReorderSelected] = useState<number | null>(null);
49
+ let [reorderSelected, setReorderSelected] = useState<number | null>(null);
48
50
  const [confirm, setConfirm] = useState<any>({ open: false, content: null, handleOnAccept: null, id: null, title: null })
51
+ const [isPressed, setIsPressed] = useState(false)
49
52
 
50
53
  const allowedOrderStatus = [1, 2, 5, 6, 10, 11, 12];
51
54
 
52
55
  const styles = StyleSheet.create({
56
+ container: {
57
+ borderRadius: 7.6,
58
+ marginBottom: 10,
59
+ paddingVertical: 5,
60
+ },
53
61
  logo: {
54
62
  borderRadius: 8,
55
63
  width: 64,
56
64
  height: 64
57
65
  },
66
+ minilogo: {
67
+ borderRadius: 8,
68
+ width: 40,
69
+ height: 40
70
+ },
58
71
  logoWrapper: {
59
72
  overflow: 'hidden',
60
73
  backgroundColor: 'white',
@@ -72,9 +85,13 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
72
85
  marginRight: 2,
73
86
  },
74
87
  reorderLoading: {
75
- width: 80,
76
- height: 40,
77
- borderRadius: 10,
88
+ height: 23,
89
+ paddingLeft: 20,
90
+ paddingRight: 20,
91
+ borderRadius: 23,
92
+ shadowOpacity: 0,
93
+ backgroundColor: theme.colors.primary,
94
+ borderWidth: 0,
78
95
  },
79
96
  reorderbutton: {
80
97
  height: 23,
@@ -100,23 +117,41 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
100
117
  infoText: {
101
118
  flexDirection: 'row',
102
119
  alignItems: 'center'
120
+ },
121
+ cardAnimation: {
122
+ elevation: isPressed ? 2 : 0,
123
+ shadowColor: '#888',
124
+ shadowOffset: { width: 0, height: isPressed ? 2 : 0 },
125
+ shadowRadius: 18,
126
+ shadowOpacity: isPressed ? 0.8 : 0,
127
+ borderRadius: 12,
103
128
  }
104
129
  });
105
130
 
106
131
  const handleReorderClick = (order: any) => {
107
- if (carts[`businessId:${order?.business_id}`] && carts[`businessId:${order?.business_id}`]?.products?.length > 0) {
132
+ setReorderSelected(null)
133
+ reorderSelected = null
134
+ const isMultiOrders = Array.isArray(order?.id)
135
+
136
+ const isRemoveCart = isMultiOrders
137
+ ? order?.business_id?.some((businessId: any) => !!carts[`businessId:${businessId}`]?.uuid)
138
+ : carts[`businessId:${order?.business_id}`] && !!carts[`businessId:${order?.business_id}`]?.uuid
139
+
140
+ if (isRemoveCart) {
108
141
  setConfirm({
109
142
  open: true,
110
143
  content: [t('QUESTION_DELETE_PRODUCTS_FROM_CART', 'Are you sure that you want to delete all products from cart?')],
111
144
  title: t('ORDER', 'Order'),
112
145
  handleOnAccept: async () => {
113
- handleRemoveCart()
146
+ handleRemoveCart(order)
114
147
  setConfirm({ ...confirm, open: false })
115
148
  }
116
149
  })
117
150
  } else {
118
- setReorderSelected(order?.id);
119
- handleReorder && handleReorder(order?.id);
151
+ const orderId = Array.isArray(order?.id) ? order?.id[0] : order?.id
152
+ setReorderSelected(orderId)
153
+ reorderSelected = orderId
154
+ handleReorder && handleReorder(order?.id)
120
155
  }
121
156
  };
122
157
 
@@ -127,11 +162,12 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
127
162
  order: {
128
163
  id: order?.id,
129
164
  business_id: order?.business_id,
130
- logo: order?.business?.logo,
165
+ logo: order?.business?.length > 1 ? order?.business?.map?.((business: any) => business?.logo) : order?.business?.logo,
131
166
  driver: order?.driver,
132
167
  products: order?.products,
133
168
  review: order?.review,
134
- user_review: order?.user_review
169
+ user_review: order?.user_review,
170
+ business: order?.business
135
171
  },
136
172
  });
137
173
  return
@@ -144,13 +180,16 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
144
180
  onNavigationRedirect('OrderDetails', { orderId: order?.uuid });
145
181
  };
146
182
 
147
- const handleClickViewOrder = (uuid: string) => {
183
+ const handleClickViewOrder = (order: any) => {
148
184
  if (isMessageView) {
149
185
  handleClickOrder(order?.uuid)
150
186
  return
151
187
  }
152
- onNavigationRedirect &&
153
- onNavigationRedirect('OrderDetails', { orderId: uuid });
188
+ if (order?.cart_group_id) {
189
+ onNavigationRedirect?.('MultiOrdersDetails', { orderId: order?.cart_group_id });
190
+ } else {
191
+ onNavigationRedirect?.('OrderDetails', { orderId: order?.uuid });
192
+ }
154
193
  };
155
194
 
156
195
  const handleChangeFavorite = () => {
@@ -159,32 +198,71 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
159
198
 
160
199
  const handleOriginalReorder = () => {
161
200
  setConfirm({ ...confirm, open: false, title: null })
162
- setReorderSelected(order?.id);
163
- handleReorder && handleReorder(order?.id);
164
201
  }
165
202
 
203
+ const hideBusinessLogo = theme?.orders?.components?.business_logo?.hidden
204
+ const hideDate = theme?.orders?.components?.date?.hidden
205
+ const hideBusinessName = theme?.orders?.components?.business_name?.hidden
206
+ const hideOrderNumber = theme?.orders?.components?.order_number?.hidden
207
+ const hideReviewOrderButton = theme?.orders?.components?.review_order_button?.hidden
208
+ const hideReorderButton = theme?.orders?.components?.reorder_button?.hidden
209
+ const hideFavorite = theme?.orders?.components?.favorite?.hidden
210
+ const hideOrderStatus = theme?.orders?.components?.order_status?.hidden
211
+
166
212
  return (
167
213
  <>
168
- <Container
169
- onPress={() => handleClickViewOrder(order?.uuid)}
170
- activeOpacity={0.7}
214
+ <CardAnimation
215
+ onClick={() => handleClickViewOrder(order)}
216
+ style={[styles.container]}
171
217
  >
172
218
  <InnerContainer>
173
- {(!!order.business?.logo || theme?.images?.dummies?.businessLogo) && (
174
- <Logo style={styles.logoWrapper}>
175
- <OIcon
176
- url={optimizeImage(order.business?.logo || theme?.images?.dummies?.businessLogo, 'h_300,c_limit')}
177
- style={styles.logo}
178
- />
179
- </Logo>
219
+ {!hideBusinessLogo && (!!order.business?.logo || theme?.images?.dummies?.businessLogo) && (
220
+ <>
221
+ {order?.business?.length > 1 ? (
222
+ <MultiLogosContainer>
223
+ {order?.business?.map((business: any, i: number) => i < 2 && (
224
+ <Logo
225
+ isMulti
226
+ key={business?.id}
227
+ style={styles.logoWrapper}
228
+ >
229
+ <FastImage
230
+ style={styles.minilogo}
231
+ source={business?.logo ? {
232
+ uri: optimizeImage(business?.logo, 'h_300,c_limit'),
233
+ priority: FastImage.priority.normal,
234
+ } : theme?.images?.dummies?.businessLogo}
235
+ resizeMode={FastImage.resizeMode.contain}
236
+ />
237
+ </Logo>
238
+ ))}
239
+ {order?.business?.length > 1 && (order?.business?.length - 2) > 0 && (
240
+ <OText mRight={3}> + {order?.business?.length - 2}</OText>
241
+ )}
242
+ </MultiLogosContainer>
243
+ ) : (
244
+ <Logo style={styles.logoWrapper}>
245
+ <FastImage
246
+ style={styles.logo}
247
+ source={order.business?.logo ? {
248
+ uri: optimizeImage(order.business?.logo, 'h_300,c_limit'),
249
+ priority: FastImage.priority.normal,
250
+ } : theme?.images?.dummies?.businessLogo}
251
+ resizeMode={FastImage.resizeMode.contain}
252
+ />
253
+ </Logo>
254
+ )}
255
+ </>
180
256
  )}
181
257
  <CardInfoWrapper>
182
258
  <ContentHeader>
183
- <View style={{ flex: 1 }}>
184
- <OText size={12} lineHeight={18} weight={'600'} numberOfLines={1} ellipsizeMode={'tail'}>
185
- {order.business?.name}
186
- </OText>
187
- </View>
259
+ {(order?.business?.length > 1 && !hideOrderNumber) || (!order?.business?.length && !hideBusinessName) && (
260
+ <View style={{ flex: 1 }}>
261
+ <OText size={12} lineHeight={18} weight={'600'} numberOfLines={1} ellipsizeMode={'tail'}>
262
+ {order?.business?.length > 1 ? `${t('GROUP_ORDER', 'Group Order')} ${t('No', 'No')}. ${order?.cart_group_id}` : order.business?.name}
263
+ </OText>
264
+ </View>
265
+ )}
188
266
  {!!!pastOrders && (
189
267
  <>
190
268
  {isMessageView ? (
@@ -208,7 +286,8 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
208
286
  )}
209
287
  {!!pastOrders && (
210
288
  <ButtonWrapper>
211
- {allowedOrderStatus.includes(parseInt(order?.status)) &&
289
+ {!hideReviewOrderButton &&
290
+ allowedOrderStatus.includes(parseInt(order?.status)) &&
212
291
  !order.review && (
213
292
  <TouchableOpacity
214
293
  onPress={() => handleClickOrderReview(order)}
@@ -218,7 +297,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
218
297
  </OText>
219
298
  </TouchableOpacity>
220
299
  )}
221
- {order.cart && (
300
+ {!hideReorderButton && typeof order?.id === 'number' && (
222
301
  <OButton
223
302
  text={t('REORDER', 'Reorder')}
224
303
  imgRightSrc={''}
@@ -238,7 +317,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
238
317
  <ContentFooter>
239
318
  <View style={{ flex: 1 }}>
240
319
  <View style={styles.infoText}>
241
- {!!!pastOrders && (
320
+ {(!!!pastOrders || order?.business?.length > 1) && !hideOrderNumber && (
242
321
  <>
243
322
  <OText
244
323
  size={10}
@@ -248,7 +327,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
248
327
  lineHeight={15}
249
328
  numberOfLines={1}
250
329
  >
251
- {t('ORDER_NO', 'Order No') + '.'}
330
+ {order?.business?.length > 1 ? order?.business?.length : (t('ORDER_NO', 'Order No') + '.')}
252
331
  </OText>
253
332
  <OText
254
333
  size={10}
@@ -257,43 +336,50 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
257
336
  lineHeight={15}
258
337
  numberOfLines={1}
259
338
  >
260
- {order.id + ` \u2022 `}
339
+ {order?.business?.length > 1 ? t('ORDERS', 'orders') + ' \u2022 ' : order.id + ` \u2022 `}
261
340
  </OText>
262
341
  </>
263
342
  )}
343
+ {!hideDate && (
344
+ <OText
345
+ size={10}
346
+ lineHeight={15}
347
+ color={theme.colors.textSecondary}
348
+ style={{ marginVertical: 3 }}
349
+ numberOfLines={1}>
350
+ {
351
+ pastOrders
352
+ ? order?.delivery_datetime_utc ? parseDate(order?.delivery_datetime_utc) : parseDate(order?.delivery_datetime, { utc: false })
353
+ : <OrderEta order={order} />
354
+ }
355
+ </OText>
356
+ )}
357
+ </View>
358
+ {!hideOrderStatus && (
264
359
  <OText
360
+ color={theme.colors.primary}
265
361
  size={10}
266
362
  lineHeight={15}
267
- color={theme.colors.textSecondary}
268
- style={{ marginVertical: 3 }}
269
363
  numberOfLines={1}>
270
- {order?.delivery_datetime_utc ? parseDate(order?.delivery_datetime_utc) : parseDate(order?.delivery_datetime, { utc: false })}
364
+ {getOrderStatus(order.status)?.value}
271
365
  </OText>
272
- </View>
273
- <OText
274
- color={theme.colors.primary}
275
- size={10}
276
- lineHeight={15}
277
- numberOfLines={1}>
278
- {getOrderStatus(order.status)?.value}
279
- </OText>
366
+ )}
280
367
  </View>
281
- {!isMessageView && (
282
- <TouchableOpacity
283
- onPress={handleChangeFavorite}
284
- style={{ marginTop: 5 }}
285
- >
286
- <IconAntDesign
287
- name={order?.favorite ? 'heart' : 'hearto'}
288
- color={theme.colors.danger5}
289
- size={16}
290
- />
291
- </TouchableOpacity>
368
+ {!isMessageView && !order?.business?.length && !hideFavorite && (
369
+ <LottieAnimation
370
+ type='favorite'
371
+ onClick={handleChangeFavorite}
372
+ initialValue={order?.favorite ? 0.75 : 0}
373
+ toValue={order?.favorite ? 0 : 0.75}
374
+ style={{ marginBottom: 5 }}
375
+ iconProps={{ color: theme.colors.danger5, size: 16, style: { top: 7 } }}
376
+ isActive={order?.favorite}
377
+ />
292
378
  )}
293
379
  </ContentFooter>
294
380
  </CardInfoWrapper>
295
381
  </InnerContainer>
296
- </Container>
382
+ </CardAnimation>
297
383
  <OAlert
298
384
  open={confirm.open}
299
385
  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
 
@@ -150,19 +171,18 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
150
171
  return (
151
172
  <InView style={{ minHeight: hideAddButton ? 125 : 190 }} 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: 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.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
+ />
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}>