ordering-ui-react-native 0.16.74 → 0.16.75-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 (216) hide show
  1. package/package.json +6 -5
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/ActiveOrders/styles.tsx +8 -14
  4. package/src/components/BusinessInformation/index.tsx +19 -4
  5. package/src/components/BusinessInformation/styles.tsx +2 -2
  6. package/src/components/BusinessProductsList/index.tsx +10 -10
  7. package/src/components/BusinessesListing/index.tsx +1 -1
  8. package/src/components/Checkout/index.tsx +2 -1
  9. package/src/components/LanguageSelector/index.tsx +21 -16
  10. package/src/components/Messages/index.tsx +2 -2
  11. package/src/components/OrderCreating/index.tsx +2 -2
  12. package/src/components/OrdersOption/index.tsx +54 -56
  13. package/src/components/PaymentOptions/index.tsx +298 -345
  14. package/src/components/PaymentOptionsWebView/index.tsx +119 -120
  15. package/src/components/SingleProductReview/index.tsx +7 -4
  16. package/src/components/StripeElementsForm/index.tsx +25 -16
  17. package/src/components/VerifyPhone/styles.tsx +1 -2
  18. package/src/components/shared/OToast.tsx +4 -4
  19. package/src/types/@fatnlazycat/react-native-recaptcha-v3/index.d.ts +1 -0
  20. package/src/utils/index.tsx +2 -1
  21. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +260 -238
  22. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  23. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  24. package/themes/business/src/components/Chat/index.tsx +31 -31
  25. package/themes/business/src/components/DriverMap/index.tsx +7 -5
  26. package/themes/business/src/components/LoginForm/Otp/index.tsx +120 -0
  27. package/themes/business/src/components/LoginForm/Otp/styles.tsx +7 -0
  28. package/themes/business/src/components/LoginForm/index.tsx +332 -140
  29. package/themes/business/src/components/LoginForm/styles.tsx +10 -0
  30. package/themes/business/src/components/MapView/index.tsx +14 -3
  31. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  32. package/themes/business/src/components/NewOrderNotification/index.tsx +31 -41
  33. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +70 -43
  34. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +3 -3
  35. package/themes/business/src/components/OrdersOption/index.tsx +63 -73
  36. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  37. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  38. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  39. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  40. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  41. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  42. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  43. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  44. package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
  45. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  46. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  47. package/themes/business/src/components/PreviousOrders/index.tsx +440 -245
  48. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  49. package/themes/business/src/components/ProductItemAccordion/index.tsx +24 -5
  50. package/themes/business/src/components/ReviewCustomer/index.tsx +39 -15
  51. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  52. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  53. package/themes/business/src/components/shared/OLink.tsx +33 -13
  54. package/themes/business/src/components/shared/OText.tsx +8 -2
  55. package/themes/business/src/types/index.tsx +29 -3
  56. package/themes/business/src/utils/index.tsx +26 -0
  57. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  58. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  59. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  60. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  61. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  62. package/themes/kiosk/src/components/LoginForm/Otp/index.tsx +92 -0
  63. package/themes/kiosk/src/components/LoginForm/Otp/styles.tsx +7 -0
  64. package/themes/kiosk/src/components/LoginForm/index.tsx +545 -112
  65. package/themes/kiosk/src/components/LoginForm/styles.tsx +18 -0
  66. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  67. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  68. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  69. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +1 -0
  70. package/themes/kiosk/src/components/PhoneInputNumber/styles.tsx +1 -3
  71. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  72. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  73. package/themes/kiosk/src/components/shared/OModal.tsx +14 -11
  74. package/themes/kiosk/src/layouts/Container.tsx +7 -1
  75. package/themes/kiosk/src/types/index.d.ts +15 -0
  76. package/themes/kiosk/src/utils/index.tsx +15 -0
  77. package/themes/original/index.tsx +6 -0
  78. package/themes/original/src/components/AddressDetails/index.tsx +10 -8
  79. package/themes/original/src/components/AddressForm/index.tsx +155 -139
  80. package/themes/original/src/components/AddressList/index.tsx +18 -18
  81. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  82. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  83. package/themes/original/src/components/BusinessBasicInformation/index.tsx +47 -22
  84. package/themes/original/src/components/BusinessController/index.tsx +101 -70
  85. package/themes/original/src/components/BusinessController/styles.tsx +14 -9
  86. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  87. package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -6
  88. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  89. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  90. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  91. package/themes/original/src/components/BusinessListingSearch/index.tsx +104 -155
  92. package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
  93. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  94. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  95. package/themes/original/src/components/BusinessProductsList/index.tsx +26 -52
  96. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  97. package/themes/original/src/components/BusinessProductsListing/index.tsx +562 -493
  98. package/themes/original/src/components/BusinessProductsListing/styles.tsx +13 -12
  99. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
  100. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  101. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +82 -69
  102. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  103. package/themes/original/src/components/BusinessesListing/index.tsx +7 -6
  104. package/themes/original/src/components/Cart/index.tsx +76 -42
  105. package/themes/original/src/components/CartContent/index.tsx +80 -18
  106. package/themes/original/src/components/CartContent/styles.tsx +11 -1
  107. package/themes/original/src/components/Checkout/index.tsx +102 -108
  108. package/themes/original/src/components/Checkout/styles.tsx +4 -3
  109. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  110. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  111. package/themes/original/src/components/DriverTips/index.tsx +47 -37
  112. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  113. package/themes/original/src/components/Favorite/index.tsx +7 -4
  114. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  115. package/themes/original/src/components/FavoriteList/index.tsx +70 -80
  116. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  117. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  118. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  119. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  120. package/themes/original/src/components/GoogleMap/index.tsx +10 -1
  121. package/themes/original/src/components/Help/index.tsx +8 -8
  122. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +14 -20
  123. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  124. package/themes/original/src/components/HelpGuide/index.tsx +13 -12
  125. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  126. package/themes/original/src/components/HelpOrder/index.tsx +12 -20
  127. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  128. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  129. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  130. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  131. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  132. package/themes/original/src/components/LoginForm/index.tsx +98 -41
  133. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  134. package/themes/original/src/components/MessageListing/index.tsx +7 -40
  135. package/themes/original/src/components/Messages/index.tsx +42 -26
  136. package/themes/original/src/components/MomentOption/index.tsx +23 -14
  137. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  138. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
  139. package/themes/original/src/components/MultiCheckout/index.tsx +158 -77
  140. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  141. package/themes/original/src/components/MultiOrdersDetails/index.tsx +85 -34
  142. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  143. package/themes/original/src/components/MyOrders/index.tsx +66 -17
  144. package/themes/original/src/components/NavBar/index.tsx +7 -6
  145. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  146. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  147. package/themes/original/src/components/Notifications/index.tsx +144 -0
  148. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  149. package/themes/original/src/components/OrderDetails/index.tsx +108 -218
  150. package/themes/original/src/components/OrderDetails/styles.tsx +10 -1
  151. package/themes/original/src/components/OrderItAgain/index.tsx +46 -43
  152. package/themes/original/src/components/OrderProgress/index.tsx +81 -105
  153. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  154. package/themes/original/src/components/OrderSummary/index.tsx +2 -2
  155. package/themes/original/src/components/OrderTypeSelector/index.tsx +13 -6
  156. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +93 -97
  157. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  158. package/themes/original/src/components/OrdersOption/index.tsx +86 -92
  159. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  160. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  161. package/themes/original/src/components/PaymentOptions/index.tsx +1 -2
  162. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  163. package/themes/original/src/components/PlaceSpot/index.tsx +16 -6
  164. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  165. package/themes/original/src/components/ProductForm/index.tsx +240 -254
  166. package/themes/original/src/components/ProductForm/styles.tsx +5 -8
  167. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  168. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -10
  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 -49
  172. package/themes/original/src/components/ProfessionalProfile/index.tsx +20 -9
  173. package/themes/original/src/components/Promotions/index.tsx +234 -220
  174. package/themes/original/src/components/Promotions/styles.tsx +7 -2
  175. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  176. package/themes/original/src/components/ReviewOrder/index.tsx +43 -11
  177. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  178. package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
  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 +360 -265
  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 +150 -100
  187. package/themes/original/src/components/SingleOrderCard/index.tsx +125 -56
  188. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  189. package/themes/original/src/components/SingleProductCard/index.tsx +116 -79
  190. package/themes/original/src/components/SingleProductCard/styles.tsx +14 -13
  191. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  192. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  193. package/themes/original/src/components/StripeCardsList/index.tsx +1 -1
  194. package/themes/original/src/components/StripeElementsForm/index.tsx +13 -2
  195. package/themes/original/src/components/UpsellingProducts/index.tsx +244 -215
  196. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  197. package/themes/original/src/components/UserDetails/index.tsx +5 -3
  198. package/themes/original/src/components/UserFormDetails/index.tsx +50 -54
  199. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  200. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  201. package/themes/original/src/components/UserProfileForm/index.tsx +21 -28
  202. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  203. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  204. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  205. package/themes/original/src/components/Wallets/index.tsx +177 -164
  206. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  207. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  208. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  209. package/themes/original/src/components/shared/OBottomPopup.tsx +6 -4
  210. package/themes/original/src/components/shared/OButton.tsx +9 -4
  211. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  212. package/themes/original/src/components/shared/OInput.tsx +10 -1
  213. package/themes/original/src/layouts/Container.tsx +13 -9
  214. package/themes/original/src/types/index.tsx +41 -6
  215. package/themes/original/src/utils/index.tsx +322 -58
  216. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -8,12 +8,10 @@ import {
8
8
  import { StyleSheet, TouchableOpacity, View } from 'react-native';
9
9
  import { useTheme } from 'styled-components/native';
10
10
  import { OIcon, OText, OButton } from '../shared';
11
- import IconAntDesign from 'react-native-vector-icons/AntDesign'
12
11
  import { SingleOrderCardParams } from '../../types';
13
12
  import { OAlert } from '../../../../../src/components/shared'
14
13
 
15
14
  import {
16
- Container,
17
15
  InnerContainer,
18
16
  Logo,
19
17
  CardInfoWrapper,
@@ -21,8 +19,11 @@ import {
21
19
  ButtonWrapper,
22
20
  ContentFooter,
23
21
  UnreadMessageCounter,
24
- Price
22
+ Price,
23
+ MultiLogosContainer
25
24
  } from './styles';
25
+ import { LottieAnimation } from '../LottieAnimation';
26
+ import { CardAnimation } from '../shared/CardAnimation';
26
27
 
27
28
  const SingleOrderCardUI = (props: SingleOrderCardParams) => {
28
29
  const {
@@ -46,15 +47,26 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
46
47
 
47
48
  const [reorderSelected, setReorderSelected] = useState<number | null>(null);
48
49
  const [confirm, setConfirm] = useState<any>({ open: false, content: null, handleOnAccept: null, id: null, title: null })
50
+ const [isPressed, setIsPressed] = useState(false)
49
51
 
50
52
  const allowedOrderStatus = [1, 2, 5, 6, 10, 11, 12];
51
53
 
52
54
  const styles = StyleSheet.create({
55
+ container: {
56
+ borderRadius: 7.6,
57
+ marginBottom: 10,
58
+ paddingVertical: 5,
59
+ },
53
60
  logo: {
54
61
  borderRadius: 8,
55
62
  width: 64,
56
63
  height: 64
57
64
  },
65
+ minilogo: {
66
+ borderRadius: 8,
67
+ width: 40,
68
+ height: 40
69
+ },
58
70
  logoWrapper: {
59
71
  overflow: 'hidden',
60
72
  backgroundColor: 'white',
@@ -72,9 +84,13 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
72
84
  marginRight: 2,
73
85
  },
74
86
  reorderLoading: {
75
- width: 80,
76
- height: 40,
77
- borderRadius: 10,
87
+ height: 23,
88
+ paddingLeft: 20,
89
+ paddingRight: 20,
90
+ borderRadius: 23,
91
+ shadowOpacity: 0,
92
+ backgroundColor: theme.colors.primary,
93
+ borderWidth: 0,
78
94
  },
79
95
  reorderbutton: {
80
96
  height: 23,
@@ -100,6 +116,14 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
100
116
  infoText: {
101
117
  flexDirection: 'row',
102
118
  alignItems: 'center'
119
+ },
120
+ cardAnimation: {
121
+ elevation: isPressed ? 2 : 0,
122
+ shadowColor: '#888',
123
+ shadowOffset: { width: 0, height: isPressed ? 2 : 0 },
124
+ shadowRadius: 18,
125
+ shadowOpacity: isPressed ? 0.8 : 0,
126
+ borderRadius: 12,
103
127
  }
104
128
  });
105
129
 
@@ -127,11 +151,12 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
127
151
  order: {
128
152
  id: order?.id,
129
153
  business_id: order?.business_id,
130
- logo: order?.business?.logo,
154
+ logo: order?.business?.length > 1 ? order?.business?.map?.((business: any) => business?.logo) : order?.business?.logo,
131
155
  driver: order?.driver,
132
156
  products: order?.products,
133
157
  review: order?.review,
134
- user_review: order?.user_review
158
+ user_review: order?.user_review,
159
+ business: order?.business
135
160
  },
136
161
  });
137
162
  return
@@ -144,13 +169,16 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
144
169
  onNavigationRedirect('OrderDetails', { orderId: order?.uuid });
145
170
  };
146
171
 
147
- const handleClickViewOrder = (uuid: string) => {
172
+ const handleClickViewOrder = (order: any) => {
148
173
  if (isMessageView) {
149
174
  handleClickOrder(order?.uuid)
150
175
  return
151
176
  }
152
- onNavigationRedirect &&
153
- onNavigationRedirect('OrderDetails', { orderId: uuid });
177
+ if (order?.cart_group_id) {
178
+ onNavigationRedirect?.('MultiOrdersDetails', { orderId: order?.cart_group_id });
179
+ } else {
180
+ onNavigationRedirect?.('OrderDetails', { orderId: order?.uuid });
181
+ }
154
182
  };
155
183
 
156
184
  const handleChangeFavorite = () => {
@@ -159,32 +187,65 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
159
187
 
160
188
  const handleOriginalReorder = () => {
161
189
  setConfirm({ ...confirm, open: false, title: null })
162
- setReorderSelected(order?.id);
163
- handleReorder && handleReorder(order?.id);
164
190
  }
165
191
 
192
+ const hideBusinessLogo = theme?.orders?.components?.business_logo?.hidden
193
+ const hideDate = theme?.orders?.components?.date?.hidden
194
+ const hideBusinessName = theme?.orders?.components?.business_name?.hidden
195
+ const hideOrderNumber = theme?.orders?.components?.order_number?.hidden
196
+ const hideReviewOrderButton = theme?.orders?.components?.review_order_button?.hidden
197
+ const hideReorderButton = theme?.orders?.components?.reorder_button?.hidden
198
+ const hideFavorite = theme?.orders?.components?.favorite?.hidden
199
+ const hideOrderStatus = theme?.orders?.components?.order_status?.hidden
200
+
166
201
  return (
167
202
  <>
168
- <Container
169
- onPress={() => handleClickViewOrder(order?.uuid)}
170
- activeOpacity={0.7}
203
+ <CardAnimation
204
+ onClick={() => handleClickViewOrder(order)}
205
+ style={[styles.container]}
171
206
  >
172
207
  <InnerContainer>
173
- {!!order.business?.logo && (
174
- <Logo style={styles.logoWrapper}>
175
- <OIcon
176
- url={optimizeImage(order.business?.logo, 'h_300,c_limit')}
177
- style={styles.logo}
178
- />
179
- </Logo>
208
+ {!hideBusinessLogo && (!!order.business?.logo || theme?.images?.dummies?.businessLogo) && (
209
+ <>
210
+ {order?.business?.length > 1 ? (
211
+ <MultiLogosContainer>
212
+ {order?.business?.map((business: any, i: number) => i < 2 && (
213
+ <Logo
214
+ isMulti
215
+ key={business?.id}
216
+ style={styles.logoWrapper}
217
+ >
218
+ <OIcon
219
+ url={optimizeImage(business?.logo, 'h_300,c_limit')}
220
+ src={optimizeImage(!business?.logo && theme?.images?.dummies?.businessLogo, 'h_300,c_limit')}
221
+ style={styles.minilogo}
222
+ />
223
+ </Logo>
224
+ ))}
225
+ {order?.business?.length > 1 && (order?.business?.length - 2) > 0 && (
226
+ <OText mRight={3}> + {order?.business?.length - 2}</OText>
227
+ )}
228
+ </MultiLogosContainer>
229
+ ) : (
230
+ <Logo style={styles.logoWrapper}>
231
+ <OIcon
232
+ url={optimizeImage(order.business?.logo, 'h_300,c_limit')}
233
+ src={optimizeImage(!order.business?.logo && theme?.images?.dummies?.businessLogo, 'h_300,c_limit')}
234
+ style={styles.logo}
235
+ />
236
+ </Logo>
237
+ )}
238
+ </>
180
239
  )}
181
240
  <CardInfoWrapper>
182
241
  <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>
242
+ {(order?.business?.length > 1 && !hideOrderNumber) || (!order?.business?.length && !hideBusinessName) && (
243
+ <View style={{ flex: 1 }}>
244
+ <OText size={12} lineHeight={18} weight={'600'} numberOfLines={1} ellipsizeMode={'tail'}>
245
+ {order?.business?.length > 1 ? `${t('GROUP_ORDER', 'Group Order')} ${t('No', 'No')}. ${order?.cart_group_id}` : order.business?.name}
246
+ </OText>
247
+ </View>
248
+ )}
188
249
  {!!!pastOrders && (
189
250
  <>
190
251
  {isMessageView ? (
@@ -208,7 +269,8 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
208
269
  )}
209
270
  {!!pastOrders && (
210
271
  <ButtonWrapper>
211
- {allowedOrderStatus.includes(parseInt(order?.status)) &&
272
+ {!hideReviewOrderButton &&
273
+ allowedOrderStatus.includes(parseInt(order?.status)) &&
212
274
  !order.review && (
213
275
  <TouchableOpacity
214
276
  onPress={() => handleClickOrderReview(order)}
@@ -218,7 +280,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
218
280
  </OText>
219
281
  </TouchableOpacity>
220
282
  )}
221
- {order.cart && (
283
+ {order.cart && !hideReorderButton && (
222
284
  <OButton
223
285
  text={t('REORDER', 'Reorder')}
224
286
  imgRightSrc={''}
@@ -238,7 +300,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
238
300
  <ContentFooter>
239
301
  <View style={{ flex: 1 }}>
240
302
  <View style={styles.infoText}>
241
- {!!!pastOrders && (
303
+ {(!!!pastOrders || order?.business?.length > 1) && !hideOrderNumber && (
242
304
  <>
243
305
  <OText
244
306
  size={10}
@@ -248,7 +310,7 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
248
310
  lineHeight={15}
249
311
  numberOfLines={1}
250
312
  >
251
- {t('ORDER_NO', 'Order No') + '.'}
313
+ {order?.business?.length > 1 ? order?.business?.length : (t('ORDER_NO', 'Order No') + '.')}
252
314
  </OText>
253
315
  <OText
254
316
  size={10}
@@ -257,43 +319,50 @@ const SingleOrderCardUI = (props: SingleOrderCardParams) => {
257
319
  lineHeight={15}
258
320
  numberOfLines={1}
259
321
  >
260
- {order.id + ` \u2022 `}
322
+ {order?.business?.length > 1 ? t('ORDERS', 'orders') + ' \u2022 ' : order.id + ` \u2022 `}
261
323
  </OText>
262
324
  </>
263
325
  )}
326
+ {!hideDate && (
327
+ <OText
328
+ size={10}
329
+ lineHeight={15}
330
+ color={theme.colors.textSecondary}
331
+ style={{ marginVertical: 3 }}
332
+ numberOfLines={1}>
333
+ {
334
+ pastOrders
335
+ ? order?.delivery_datetime_utc ? parseDate(order?.delivery_datetime_utc) : parseDate(order?.delivery_datetime, { utc: false })
336
+ : order?.eta_time + 'min'
337
+ }
338
+ </OText>
339
+ )}
340
+ </View>
341
+ {!hideOrderStatus && (
264
342
  <OText
343
+ color={theme.colors.primary}
265
344
  size={10}
266
345
  lineHeight={15}
267
- color={theme.colors.textSecondary}
268
- style={{ marginVertical: 3 }}
269
346
  numberOfLines={1}>
270
- {order?.delivery_datetime_utc ? parseDate(order?.delivery_datetime_utc) : parseDate(order?.delivery_datetime, { utc: false })}
347
+ {getOrderStatus(order.status)?.value}
271
348
  </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>
349
+ )}
280
350
  </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>
351
+ {!isMessageView && !order?.business?.length && !hideFavorite && (
352
+ <LottieAnimation
353
+ type='favorite'
354
+ onClick={handleChangeFavorite}
355
+ initialValue={order?.favorite ? 0.75 : 0}
356
+ toValue={order?.favorite ? 0 : 0.75}
357
+ style={{ marginBottom: 5 }}
358
+ iconProps={{ color: theme.colors.danger5, size: 16, style: { top: 7 } }}
359
+ isActive={order?.favorite}
360
+ />
292
361
  )}
293
362
  </ContentFooter>
294
363
  </CardInfoWrapper>
295
364
  </InnerContainer>
296
- </Container>
365
+ </CardAnimation>
297
366
  <OAlert
298
367
  open={confirm.open}
299
368
  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`
@@ -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
+ `
@@ -1,22 +1,25 @@
1
- import React, { useState, useRef, useEffect } from 'react';
1
+ import React, { useState } from 'react';
2
2
  import {
3
3
  useLanguage,
4
4
  useConfig,
5
5
  useOrder,
6
6
  useUtils,
7
7
  useSession,
8
+ ToastType,
9
+ useToast,
8
10
  SingleProductCard as SingleProductCardController
9
11
  } from 'ordering-components/native';
10
12
  import { useTheme } from 'styled-components/native';
11
13
  import { SingleProductCardParams } from '../../types';
12
- import { CardContainer, CardInfo, SoldOut, QuantityContainer, PricesContainer, RibbonBox, LogoWrapper } from './styles';
13
- import { StyleSheet, View, TouchableOpacity, Image, Animated } from 'react-native';
14
+ import { CardInfo, SoldOut, QuantityContainer, PricesContainer, RibbonBox, LogoWrapper, TagsContainer } from './styles';
15
+ import { ScrollView, StyleSheet, TouchableWithoutFeedback, View } from 'react-native';
14
16
  import { InView } from 'react-native-intersection-observer'
15
17
  import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
16
- import { OButton, OText } from '../shared';
18
+ import { OButton, OIcon, OText } from '../shared';
17
19
  import FastImage from 'react-native-fast-image'
18
- import IconAntDesign from 'react-native-vector-icons/AntDesign'
19
20
  import { shape } from '../../utils';
21
+ import { LottieAnimation } from '../LottieAnimation';
22
+ import { CardAnimation } from '../shared/CardAnimation'
20
23
 
21
24
  function SingleProductCardPropsAreEqual(prevProps: any, nextProps: any) {
22
25
  return JSON.stringify(prevProps.product) === JSON.stringify(nextProps.product) &&
@@ -36,21 +39,33 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
36
39
  enableIntersection,
37
40
  navigation,
38
41
  businessId,
39
- isPreviously
42
+ isPreviously,
43
+ viewString
40
44
  } = props;
41
45
 
42
46
  const theme = useTheme();
43
47
  const hideAddButton = theme?.business_view?.components?.products?.components?.add_to_cart_button?.hidden ?? true
44
-
45
- const fadeAnim = useRef(new Animated.Value(0)).current;
48
+ const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
49
+ const hideProductDescription = theme?.business_view?.components?.products?.components?.product?.components?.description?.hidden
50
+ const hideProductLogo = viewString
51
+ ? theme?.[viewString]?.components?.cart?.components?.products?.image?.hidden
52
+ : theme?.business_view?.components?.products?.components?.product?.components?.image?.hidden
53
+ const textSize = isChewLayout ? 12 : 10
54
+ const logoPosition = theme?.business_view?.components?.products?.components?.product?.components?.image?.position
46
55
 
47
56
  const styles = StyleSheet.create({
48
57
  container: {
49
58
  borderWidth: 1,
50
- borderRadius: 7.6,
51
59
  borderColor: theme.colors.border,
52
- marginBottom: 28,
53
- minHeight: 165
60
+ marginBottom: 25,
61
+ minHeight: hideAddButton ? 100 : 165,
62
+ flex: 1,
63
+ flexDirection: hideAddButton ? 'row' : 'column',
64
+ justifyContent: 'space-between',
65
+ alignItems: 'center',
66
+ padding: 12,
67
+ borderRadius: 10,
68
+ position: 'relative'
54
69
  },
55
70
  titleWrapper: {
56
71
  flexDirection: 'row',
@@ -70,8 +85,8 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
70
85
  textTransform: 'uppercase',
71
86
  },
72
87
  productStyle: {
73
- width: 75,
74
- height: 75,
88
+ width: 85,
89
+ height: 85,
75
90
  borderRadius: 7.6
76
91
  },
77
92
  quantityContainer: {
@@ -89,7 +104,12 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
89
104
  color: '#808080',
90
105
  textDecorationLine: 'line-through',
91
106
  marginLeft: 7,
92
- marginRight: 7
107
+ marginRight: 0
108
+ },
109
+ productTagsStyle: {
110
+ width: 30,
111
+ height: 30,
112
+ marginRight: 5
93
113
  }
94
114
  });
95
115
 
@@ -98,6 +118,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
98
118
  const [{ auth }] = useSession()
99
119
  const [{ parsePrice, optimizeImage, parseDate }] = useUtils();
100
120
  const [orderState] = useOrder()
121
+ const [, { showToast }] = useToast()
101
122
  const [isIntersectionObserver, setIsIntersectionObserver] = useState(!enableIntersection)
102
123
 
103
124
  const editMode = typeof product?.code !== 'undefined';
@@ -124,14 +145,6 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
124
145
  maxCartProductInventory,
125
146
  );
126
147
 
127
- const fadeIn = () => {
128
- Animated.timing(fadeAnim, {
129
- toValue: 1,
130
- duration: 500,
131
- useNativeDriver: true
132
- }).start();
133
- };
134
-
135
148
  const handleChangeFavorite = () => {
136
149
  if (auth) {
137
150
  handleFavoriteProduct && handleFavoriteProduct(!product?.favorite)
@@ -141,30 +154,34 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
141
154
  }
142
155
 
143
156
  const handleChangeIntersection = () => {
144
- setIsIntersectionObserver(true);
145
- fadeIn();
157
+ if (enableIntersection) {
158
+ setIsIntersectionObserver(true);
159
+ }
146
160
  }
147
161
 
148
- useEffect(() => {
149
- if (!enableIntersection) fadeIn()
150
- }, [enableIntersection])
162
+ const handleClickproduct = () => {
163
+ if (productAddedToCartLength && product?.maximum_per_order && productAddedToCartLength >= product?.maximum_per_order) {
164
+ showToast(ToastType.Error, t('PRODUCT_ON_MAXIMUM_ORDER', 'The product is on maximum order'))
165
+ return
166
+ }
167
+ onProductClick?.(product)
168
+ }
151
169
 
152
170
  return (
153
- <InView style={{ minHeight: 200 }} triggerOnce={true} onChange={(inView: boolean) => handleChangeIntersection()}>
171
+ <InView style={{ minHeight: hideAddButton ? 125 : 190 }} triggerOnce={true} onChange={(inView: boolean) => handleChangeIntersection()}>
154
172
  {isIntersectionObserver ? (
155
- <CardContainer
156
- showAddButton={!hideAddButton}
173
+ <CardAnimation
174
+ onClick={() => handleClickproduct()}
157
175
  style={[
158
176
  styles.container,
159
177
  (isSoldOut || maxProductQuantity <= 0) && styles.soldOutBackgroundStyle,
160
- (style && { ...style }),
178
+ (style && { ...style })
161
179
  ]}
162
- onPress={() => onProductClick?.(product)}
163
180
  >
164
- <View style={{ flexDirection: 'row' }}>
181
+ <View style={{ flexDirection: logoPosition === 'left' ? 'row-reverse' : 'row' }}>
165
182
  {productAddedToCartLength > 0 && (
166
183
  <QuantityContainer style={[styles.quantityContainer, {
167
- transform: [{ translateX: 25 }, { translateY: -55 }],
184
+ transform: [{ translateX: 25 }, { translateY: -25 }],
168
185
  }]}>
169
186
  <OText size={12} color={theme.colors.white}>{productAddedToCartLength.toString()}</OText>
170
187
  </QuantityContainer>
@@ -172,7 +189,7 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
172
189
  <CardInfo>
173
190
  <View style={styles.titleWrapper}>
174
191
  <OText
175
- size={12}
192
+ size={textSize + 2}
176
193
  weight={'500'}
177
194
  numberOfLines={1}
178
195
  ellipsizeMode="tail"
@@ -180,34 +197,62 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
180
197
  {product?.name}
181
198
  </OText>
182
199
  {!isPreviously && (
183
- <TouchableOpacity
184
- onPress={handleChangeFavorite}
185
- >
186
- <IconAntDesign
187
- name={product?.favorite ? 'heart' : 'hearto'}
188
- color={theme.colors.danger5}
189
- size={18}
190
- />
191
- </TouchableOpacity>
200
+ <LottieAnimation
201
+ type='favorite'
202
+ onClick={handleChangeFavorite}
203
+ initialValue={product?.favorite ? 0.75 : 0}
204
+ toValue={product?.favorite ? 0 : 0.75}
205
+ disableAnimation={!auth}
206
+ iconProps={{ color: theme.colors.danger5, size: 18 }}
207
+ isActive={product?.favorite}
208
+ />
192
209
  )}
193
210
  </View>
194
211
  <PricesContainer>
195
- <OText color={theme.colors.primary}>{product?.price ? parsePrice(product?.price) : ''}</OText>
196
- {product?.offer_price !== null && product?.in_offer && (
212
+ {!!product?.price && (
213
+ <OText color={theme.colors.primary}>{parsePrice(product?.price)}</OText>
214
+ )}
215
+ {product?.offer_price !== null && !!product?.in_offer && (
197
216
  <OText style={styles.regularPriceStyle}>{product?.offer_price ? parsePrice(product?.offer_price) : ''}</OText>
198
217
  )}
218
+ {!isPreviously && product?.tags && product?.tags.length > 0 && (
219
+ <ScrollView
220
+ showsVerticalScrollIndicator={false}
221
+ showsHorizontalScrollIndicator={false}
222
+ horizontal
223
+ style={{ marginLeft: 10 }}
224
+ contentContainerStyle={{flexGrow: 1}}
225
+ >
226
+ {product?.tags.map((tag: any, i: any) => (
227
+ <TouchableWithoutFeedback key={i}>
228
+ <TagsContainer>
229
+ <FastImage
230
+ style={styles.productTagsStyle}
231
+ source={tag.image ? {
232
+ uri: optimizeImage(tag.image, 'h_250,c_limit'),
233
+ priority: FastImage.priority.normal,
234
+ } : theme?.images?.dummies?.product}
235
+ resizeMode={FastImage.resizeMode.cover}
236
+ />
237
+ </TagsContainer>
238
+ </TouchableWithoutFeedback>
239
+ ))}
240
+ </ScrollView>
241
+ )}
199
242
  </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>
243
+ {!hideProductDescription && (
244
+ <OText
245
+ size={textSize}
246
+ numberOfLines={!isPreviously ? 2 : 1}
247
+ ellipsizeMode="tail"
248
+ color={theme.colors.textSecondary}
249
+ style={styles.line15}>
250
+ {product?.description}
251
+ </OText>
252
+ )}
208
253
  {isPreviously && (
209
254
  <OText
210
- size={10}
255
+ size={textSize}
211
256
  numberOfLines={1}
212
257
  ellipsizeMode="tail"
213
258
  color={theme.colors.primary}
@@ -216,15 +261,15 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
216
261
  </OText>
217
262
  )}
218
263
  </CardInfo>
219
- <LogoWrapper>
220
- {product?.ribbon?.enabled && (
264
+ <LogoWrapper logoPosition={logoPosition}>
265
+ {!!product?.ribbon?.enabled && (
221
266
  <RibbonBox
222
267
  bgColor={product?.ribbon?.color}
223
268
  isRoundRect={product?.ribbon?.shape === shape?.rectangleRound}
224
269
  isCapsule={product?.ribbon?.shape === shape?.capsuleShape}
225
270
  >
226
271
  <OText
227
- size={10}
272
+ size={textSize}
228
273
  weight={'400'}
229
274
  color={theme.colors.white}
230
275
  numberOfLines={2}
@@ -235,24 +280,15 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
235
280
  </OText>
236
281
  </RibbonBox>
237
282
  )}
238
- {product?.images && (
239
- <Animated.View
240
- style={[
241
- {
242
- // Bind opacity to animated value
243
- opacity: fadeAnim
244
- }
245
- ]}
246
- >
247
- <FastImage
248
- style={styles.productStyle}
249
- source={{
250
- uri: optimizeImage(product?.images, 'h_250,c_limit'),
251
- priority: FastImage.priority.normal,
252
- }}
253
- resizeMode={FastImage.resizeMode.cover}
254
- />
255
- </Animated.View>
283
+ {!hideProductLogo && (
284
+ <FastImage
285
+ style={styles.productStyle}
286
+ source={product?.images ? {
287
+ uri: optimizeImage(product?.images, 'h_250,c_limit'),
288
+ priority: FastImage.priority.normal,
289
+ } : theme?.images?.dummies?.product}
290
+ resizeMode={FastImage.resizeMode.cover}
291
+ />
256
292
  )}
257
293
  </LogoWrapper>
258
294
 
@@ -266,11 +302,12 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
266
302
  </View>
267
303
  {!hideAddButton && (
268
304
  <OButton
269
- onClick={() => onProductClick?.(product)}
305
+ onClick={() => handleClickproduct()}
270
306
  style={{
271
307
  width: '100%',
272
308
  borderRadius: 7.6,
273
309
  marginTop: 10,
310
+ height: 40
274
311
 
275
312
  }}
276
313
  bgColor={isSoldOut ? '#B8B8B8' : theme?.colors?.white}
@@ -279,9 +316,9 @@ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
279
316
  text={t('ADD', 'Add')}
280
317
  />
281
318
  )}
282
- </CardContainer>
319
+ </CardAnimation>
283
320
  ) : (
284
- <View style={{ minHeight: 165, marginBottom: 28, padding: 12 }}>
321
+ <View style={{ marginBottom: 28, padding: 12, height: hideAddButton ? 125 : 165 }}>
285
322
  <Placeholder style={{ padding: 5 }} Animation={Fade}>
286
323
  <View style={{ flexDirection: 'row' }}>
287
324
  <Placeholder style={{ paddingVertical: 10, flex: 1 }}>