ordering-ui-react-native 0.16.62 → 0.16.63-release

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/package.json +6 -5
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/ActiveOrders/index.tsx +61 -63
  4. package/src/components/ActiveOrders/styles.tsx +8 -14
  5. package/src/components/BusinessInformation/index.tsx +19 -4
  6. package/src/components/BusinessInformation/styles.tsx +2 -2
  7. package/src/components/BusinessProductsList/index.tsx +10 -10
  8. package/src/components/BusinessesListing/index.tsx +1 -1
  9. package/src/components/Checkout/index.tsx +2 -1
  10. package/src/components/LanguageSelector/index.tsx +21 -16
  11. package/src/components/Messages/index.tsx +2 -2
  12. package/src/components/NotificationSetting/index.tsx +85 -0
  13. package/src/components/OrdersOption/index.tsx +54 -56
  14. package/src/components/PaymentOptions/index.tsx +298 -345
  15. package/src/components/PaymentOptionsWebView/index.tsx +119 -120
  16. package/src/components/SingleProductReview/index.tsx +7 -4
  17. package/src/components/StripeElementsForm/index.tsx +25 -16
  18. package/src/components/VerifyPhone/styles.tsx +1 -2
  19. package/src/components/shared/OBottomPopup.tsx +6 -2
  20. package/src/components/shared/OToast.tsx +4 -4
  21. package/src/index.tsx +2 -0
  22. package/src/types/@fatnlazycat/react-native-recaptcha-v3/index.d.ts +1 -0
  23. package/src/utils/index.tsx +2 -1
  24. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +260 -238
  25. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  26. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  27. package/themes/business/src/components/Chat/index.tsx +40 -32
  28. package/themes/business/src/components/DriverMap/index.tsx +7 -5
  29. package/themes/business/src/components/LoginForm/index.tsx +111 -74
  30. package/themes/business/src/components/MapView/index.tsx +12 -1
  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/OrdersListManager/index.tsx +10 -3
  36. package/themes/business/src/components/OrdersOption/index.tsx +76 -77
  37. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  38. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  39. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  40. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  41. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  42. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  43. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  44. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  45. package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
  46. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  47. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  48. package/themes/business/src/components/PreviousOrders/index.tsx +440 -245
  49. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  50. package/themes/business/src/components/ProductItemAccordion/index.tsx +3 -2
  51. package/themes/business/src/components/ReviewCustomer/index.tsx +39 -15
  52. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  53. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  54. package/themes/business/src/components/shared/OLink.tsx +33 -13
  55. package/themes/business/src/components/shared/OText.tsx +8 -2
  56. package/themes/business/src/types/index.tsx +24 -11
  57. package/themes/business/src/utils/index.tsx +10 -0
  58. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  59. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  60. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  61. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  62. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  63. package/themes/kiosk/src/components/LoginForm/index.tsx +121 -10
  64. package/themes/kiosk/src/components/LoginForm/styles.tsx +5 -0
  65. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  66. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  67. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  68. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  69. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  70. package/themes/kiosk/src/types/index.d.ts +2 -0
  71. package/themes/original/index.tsx +8 -0
  72. package/themes/original/src/components/AddressDetails/index.tsx +10 -8
  73. package/themes/original/src/components/AddressForm/index.tsx +153 -137
  74. package/themes/original/src/components/AddressList/index.tsx +18 -18
  75. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  76. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  77. package/themes/original/src/components/BusinessBasicInformation/index.tsx +53 -37
  78. package/themes/original/src/components/BusinessController/index.tsx +106 -48
  79. package/themes/original/src/components/BusinessController/styles.tsx +14 -9
  80. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  81. package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -6
  82. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  83. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  84. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  85. package/themes/original/src/components/BusinessListingSearch/index.tsx +87 -142
  86. package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
  87. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  88. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  89. package/themes/original/src/components/BusinessProductsList/index.tsx +55 -61
  90. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  91. package/themes/original/src/components/BusinessProductsListing/index.tsx +175 -94
  92. package/themes/original/src/components/BusinessProductsListing/styles.tsx +13 -12
  93. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
  94. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  95. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +98 -103
  96. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  97. package/themes/original/src/components/BusinessesListing/index.tsx +14 -8
  98. package/themes/original/src/components/Cart/index.tsx +77 -24
  99. package/themes/original/src/components/Cart/styles.tsx +4 -0
  100. package/themes/original/src/components/CartContent/index.tsx +77 -18
  101. package/themes/original/src/components/CartContent/styles.tsx +11 -1
  102. package/themes/original/src/components/Checkout/index.tsx +110 -114
  103. package/themes/original/src/components/Checkout/styles.tsx +4 -3
  104. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  105. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  106. package/themes/original/src/components/DriverTips/index.tsx +4 -4
  107. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  108. package/themes/original/src/components/Favorite/index.tsx +7 -4
  109. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  110. package/themes/original/src/components/FavoriteList/index.tsx +69 -45
  111. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  112. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  113. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  114. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  115. package/themes/original/src/components/GoogleMap/index.tsx +10 -1
  116. package/themes/original/src/components/Help/index.tsx +7 -7
  117. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +14 -20
  118. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  119. package/themes/original/src/components/HelpGuide/index.tsx +12 -11
  120. package/themes/original/src/components/HelpGuide/styles.tsx +5 -0
  121. package/themes/original/src/components/HelpOrder/index.tsx +12 -20
  122. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  123. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  124. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  125. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  126. package/themes/original/src/components/LoginForm/index.tsx +98 -41
  127. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  128. package/themes/original/src/components/MessageListing/index.tsx +7 -7
  129. package/themes/original/src/components/Messages/index.tsx +35 -20
  130. package/themes/original/src/components/MomentOption/index.tsx +17 -11
  131. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  132. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
  133. package/themes/original/src/components/MultiCheckout/index.tsx +96 -76
  134. package/themes/original/src/components/MultiOrdersDetails/index.tsx +34 -16
  135. package/themes/original/src/components/MyOrders/index.tsx +89 -25
  136. package/themes/original/src/components/NavBar/index.tsx +7 -6
  137. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  138. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  139. package/themes/original/src/components/Notifications/index.tsx +144 -0
  140. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  141. package/themes/original/src/components/OrderDetails/index.tsx +114 -15
  142. package/themes/original/src/components/OrderDetails/styles.tsx +15 -2
  143. package/themes/original/src/components/OrderItAgain/index.tsx +75 -0
  144. package/themes/original/src/components/OrderItAgain/styles.tsx +10 -0
  145. package/themes/original/src/components/OrderProgress/index.tsx +77 -66
  146. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  147. package/themes/original/src/components/OrderSummary/index.tsx +3 -36
  148. package/themes/original/src/components/OrderTypeSelector/index.tsx +13 -6
  149. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +94 -98
  150. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  151. package/themes/original/src/components/OrdersOption/index.tsx +97 -55
  152. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  153. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  154. package/themes/original/src/components/PaymentOptions/index.tsx +1 -2
  155. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  156. package/themes/original/src/components/PlaceSpot/index.tsx +249 -47
  157. package/themes/original/src/components/PlaceSpot/styles.tsx +0 -2
  158. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  159. package/themes/original/src/components/ProductForm/index.tsx +226 -257
  160. package/themes/original/src/components/ProductForm/styles.tsx +5 -8
  161. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  162. package/themes/original/src/components/ProductOptionSubOption/index.tsx +17 -9
  163. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +0 -1
  164. package/themes/original/src/components/ProfessionalFilter/index.tsx +2 -1
  165. package/themes/original/src/components/ProfessionalProfile/index.tsx +19 -8
  166. package/themes/original/src/components/Promotions/index.tsx +234 -220
  167. package/themes/original/src/components/Promotions/styles.tsx +7 -2
  168. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  169. package/themes/original/src/components/ReviewOrder/index.tsx +43 -11
  170. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  171. package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
  172. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  173. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  174. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  175. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  176. package/themes/original/src/components/ServiceForm/index.tsx +328 -264
  177. package/themes/original/src/components/SignupForm/index.tsx +134 -89
  178. package/themes/original/src/components/SingleOrderCard/index.tsx +129 -54
  179. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  180. package/themes/original/src/components/SingleProductCard/index.tsx +106 -69
  181. package/themes/original/src/components/SingleProductCard/styles.tsx +2 -9
  182. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  183. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  184. package/themes/original/src/components/StripeCardsList/index.tsx +1 -1
  185. package/themes/original/src/components/StripeElementsForm/index.tsx +13 -2
  186. package/themes/original/src/components/UpsellingProducts/index.tsx +244 -215
  187. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  188. package/themes/original/src/components/UserDetails/index.tsx +5 -3
  189. package/themes/original/src/components/UserFormDetails/index.tsx +6 -48
  190. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  191. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  192. package/themes/original/src/components/UserProfileForm/index.tsx +19 -28
  193. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  194. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  195. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  196. package/themes/original/src/components/Wallets/index.tsx +176 -164
  197. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  198. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  199. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  200. package/themes/original/src/components/shared/OBottomPopup.tsx +6 -4
  201. package/themes/original/src/components/shared/OButton.tsx +9 -4
  202. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  203. package/themes/original/src/components/shared/OInput.tsx +10 -1
  204. package/themes/original/src/layouts/Container.tsx +13 -9
  205. package/themes/original/src/types/index.tsx +55 -5
  206. package/themes/original/src/utils/index.tsx +103 -58
  207. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -5,18 +5,21 @@ import {
5
5
  useOrder,
6
6
  useUtils,
7
7
  useSession,
8
+ ToastType,
9
+ useToast,
8
10
  SingleProductCard as SingleProductCardController
9
11
  } from 'ordering-components/native';
10
12
  import { useTheme } from 'styled-components/native';
11
13
  import { SingleProductCardParams } from '../../types';
12
- import { CardContainer, CardInfo, SoldOut, QuantityContainer, PricesContainer, RibbonBox, LogoWrapper } from './styles';
13
- import { StyleSheet, View, TouchableOpacity, Image } from 'react-native';
14
+ import { CardInfo, SoldOut, QuantityContainer, PricesContainer, RibbonBox, LogoWrapper } from './styles';
15
+ import { StyleSheet, 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) &&
@@ -25,7 +28,7 @@ function SingleProductCardPropsAreEqual(prevProps: any, nextProps: any) {
25
28
  prevProps.categoryState === nextProps.categoryState
26
29
  }
27
30
 
28
- const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
31
+ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
29
32
  const {
30
33
  product,
31
34
  isSoldOut,
@@ -35,18 +38,29 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
35
38
  handleFavoriteProduct,
36
39
  enableIntersection,
37
40
  navigation,
38
- businessId
41
+ businessId,
42
+ isPreviously
39
43
  } = props;
40
44
 
41
45
  const theme = useTheme();
42
- const showAddButton = !theme?.layouts?.business_view?.components?.products?.components?.add_to_cart_button?.hidden
46
+ const hideAddButton = theme?.business_view?.components?.products?.components?.add_to_cart_button?.hidden ?? true
47
+ const isChewLayout = theme?.header?.components?.layout?.type === 'chew'
48
+
49
+ const textSize = isChewLayout ? 12 : 10
43
50
 
44
51
  const styles = StyleSheet.create({
45
52
  container: {
46
53
  borderWidth: 1,
47
- borderRadius: 7.6,
48
54
  borderColor: theme.colors.border,
49
- marginBottom: 28,
55
+ marginBottom: 25,
56
+ minHeight: hideAddButton ? 100 : 165,
57
+ flex: 1,
58
+ flexDirection: hideAddButton ? 'row' : 'column',
59
+ justifyContent: 'space-between',
60
+ alignItems: 'center',
61
+ padding: 12,
62
+ borderRadius: 10,
63
+ position: 'relative'
50
64
  },
51
65
  titleWrapper: {
52
66
  flexDirection: 'row',
@@ -66,14 +80,14 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
66
80
  textTransform: 'uppercase',
67
81
  },
68
82
  productStyle: {
69
- width: 75,
70
- height: 75,
83
+ width: 85,
84
+ height: 85,
71
85
  borderRadius: 7.6
72
86
  },
73
87
  quantityContainer: {
74
88
  position: 'absolute',
75
- left: '100%',
76
- bottom: '100%',
89
+ right: 0,
90
+ top: 0,
77
91
  width: 25,
78
92
  height: 25,
79
93
  textAlign: 'center',
@@ -92,8 +106,9 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
92
106
  const [, t] = useLanguage();
93
107
  const [stateConfig] = useConfig();
94
108
  const [{ auth }] = useSession()
95
- const [{ parsePrice, optimizeImage }] = useUtils();
109
+ const [{ parsePrice, optimizeImage, parseDate }] = useUtils();
96
110
  const [orderState] = useOrder()
111
+ const [, { showToast }] = useToast()
97
112
  const [isIntersectionObserver, setIsIntersectionObserver] = useState(!enableIntersection)
98
113
 
99
114
  const editMode = typeof product?.code !== 'undefined';
@@ -128,22 +143,35 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
128
143
  }
129
144
  }
130
145
 
146
+ const handleChangeIntersection = () => {
147
+ if (enableIntersection) {
148
+ setIsIntersectionObserver(true);
149
+ }
150
+ }
151
+
152
+ const handleClickproduct = () => {
153
+ if (productAddedToCartLength && product?.maximum_per_order && productAddedToCartLength >= product?.maximum_per_order) {
154
+ showToast(ToastType.Error, t('PRODUCT_ON_MAXIMUM_ORDER', 'The product is on maximum order'))
155
+ return
156
+ }
157
+ onProductClick?.(product)
158
+ }
159
+
131
160
  return (
132
- <InView style={{ minHeight: 200 }} triggerOnce={true} onChange={(inView: boolean) => setIsIntersectionObserver(true)}>
161
+ <InView style={{ minHeight: hideAddButton ? 125 : 190 }} triggerOnce={true} onChange={(inView: boolean) => handleChangeIntersection()}>
133
162
  {isIntersectionObserver ? (
134
- <CardContainer
135
- showAddButton={showAddButton}
163
+ <CardAnimation
164
+ onClick={() => handleClickproduct()}
136
165
  style={[
137
166
  styles.container,
138
167
  (isSoldOut || maxProductQuantity <= 0) && styles.soldOutBackgroundStyle,
139
- (style && { ...style }),
168
+ (style && { ...style })
140
169
  ]}
141
- onPress={() => onProductClick?.(product)}
142
170
  >
143
171
  <View style={{ flexDirection: 'row' }}>
144
172
  {productAddedToCartLength > 0 && (
145
173
  <QuantityContainer style={[styles.quantityContainer, {
146
- transform: [{ translateX: 10 }, { translateY: -10 }],
174
+ transform: [{ translateX: 25 }, { translateY: -25 }],
147
175
  }]}>
148
176
  <OText size={12} color={theme.colors.white}>{productAddedToCartLength.toString()}</OText>
149
177
  </QuantityContainer>
@@ -151,47 +179,61 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
151
179
  <CardInfo>
152
180
  <View style={styles.titleWrapper}>
153
181
  <OText
154
- size={12}
182
+ size={textSize + 2}
155
183
  weight={'500'}
156
184
  numberOfLines={1}
157
185
  ellipsizeMode="tail"
158
186
  style={{ ...styles.line18, flex: 1 }}>
159
187
  {product?.name}
160
188
  </OText>
161
- <TouchableOpacity
162
- onPress={handleChangeFavorite}
163
- >
164
- <IconAntDesign
165
- name={product?.favorite ? 'heart' : 'hearto'}
166
- color={theme.colors.danger5}
167
- size={18}
189
+ {!isPreviously && (
190
+ <LottieAnimation
191
+ type='favorite'
192
+ onClick={handleChangeFavorite}
193
+ initialValue={product?.favorite ? 0.75 : 0}
194
+ toValue={product?.favorite ? 0 : 0.75}
195
+ disableAnimation={!auth}
196
+ iconProps={{ color: theme.colors.danger5, size: 18 }}
197
+ isActive={product?.favorite}
168
198
  />
169
- </TouchableOpacity>
199
+ )}
170
200
  </View>
171
201
  <PricesContainer>
172
- <OText color={theme.colors.primary}>{product?.price ? parsePrice(product?.price) : ''}</OText>
173
- {product?.offer_price !== null && product?.in_offer && (
202
+ {!!product?.price && (
203
+ <OText color={theme.colors.primary}>{parsePrice(product?.price)}</OText>
204
+ )}
205
+ {product?.offer_price !== null && !!product?.in_offer && (
174
206
  <OText style={styles.regularPriceStyle}>{product?.offer_price ? parsePrice(product?.offer_price) : ''}</OText>
175
207
  )}
176
208
  </PricesContainer>
177
209
  <OText
178
- size={10}
179
- numberOfLines={2}
210
+ size={textSize}
211
+ numberOfLines={!isPreviously ? 2 : 1}
180
212
  ellipsizeMode="tail"
181
213
  color={theme.colors.textSecondary}
182
214
  style={styles.line15}>
183
215
  {product?.description}
184
216
  </OText>
217
+ {isPreviously && (
218
+ <OText
219
+ size={textSize}
220
+ numberOfLines={1}
221
+ ellipsizeMode="tail"
222
+ color={theme.colors.primary}
223
+ style={styles.line15}>
224
+ {t('LAST_ORDERED_ON', 'Last ordered on')} {parseDate(product?.last_ordered_date, { outputFormat: 'MMM DD, YYYY' })}
225
+ </OText>
226
+ )}
185
227
  </CardInfo>
186
228
  <LogoWrapper>
187
- {product?.ribbon?.enabled && (
229
+ {!!product?.ribbon?.enabled && (
188
230
  <RibbonBox
189
231
  bgColor={product?.ribbon?.color}
190
232
  isRoundRect={product?.ribbon?.shape === shape?.rectangleRound}
191
233
  isCapsule={product?.ribbon?.shape === shape?.capsuleShape}
192
234
  >
193
235
  <OText
194
- size={10}
236
+ size={textSize}
195
237
  weight={'400'}
196
238
  color={theme.colors.white}
197
239
  numberOfLines={2}
@@ -202,25 +244,14 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
202
244
  </OText>
203
245
  </RibbonBox>
204
246
  )}
205
- {product?.images ? (
206
- <FastImage
207
- style={styles.productStyle}
208
- source={{
209
- uri: optimizeImage(product?.images, 'h_250,c_limit'),
210
- priority: FastImage.priority.normal,
211
- }}
212
- resizeMode={FastImage.resizeMode.cover}
213
- />
214
- ) : (
215
- <FastImage
216
- style={styles.productStyle}
217
- source={{
218
- uri: Image.resolveAssetSource(theme.images.dummies.product).uri,
219
- priority: FastImage.priority.normal,
220
- }}
221
- resizeMode={FastImage.resizeMode.cover}
222
- />
223
- )}
247
+ <FastImage
248
+ style={styles.productStyle}
249
+ source={product?.images ? {
250
+ uri: optimizeImage(product?.images, 'h_250,c_limit'),
251
+ priority: FastImage.priority.normal,
252
+ } : theme?.images?.dummies?.product}
253
+ resizeMode={FastImage.resizeMode.cover}
254
+ />
224
255
  </LogoWrapper>
225
256
 
226
257
  {(isSoldOut || maxProductQuantity <= 0) && (
@@ -231,13 +262,14 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
231
262
  </SoldOut>
232
263
  )}
233
264
  </View>
234
- {showAddButton && (
265
+ {!hideAddButton && (
235
266
  <OButton
236
- onClick={() => onProductClick?.(product)}
267
+ onClick={() => handleClickproduct()}
237
268
  style={{
238
269
  width: '100%',
239
270
  borderRadius: 7.6,
240
271
  marginTop: 10,
272
+ height: 40
241
273
 
242
274
  }}
243
275
  bgColor={isSoldOut ? '#B8B8B8' : theme?.colors?.white}
@@ -246,21 +278,26 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
246
278
  text={t('ADD', 'Add')}
247
279
  />
248
280
  )}
249
- </CardContainer>
281
+ </CardAnimation>
250
282
  ) : (
251
- <Placeholder style={{ padding: 5 }} Animation={Fade}>
252
- <View style={{ flexDirection: 'row' }}>
283
+ <View style={{ marginBottom: 28, padding: 12, height: hideAddButton ? 125 : 165 }}>
284
+ <Placeholder style={{ padding: 5 }} Animation={Fade}>
285
+ <View style={{ flexDirection: 'row' }}>
286
+ <Placeholder style={{ paddingVertical: 10, flex: 1 }}>
287
+ <PlaceholderLine width={60} style={{ marginBottom: 15 }} />
288
+ <PlaceholderLine width={20} />
289
+ </Placeholder>
290
+ <PlaceholderLine
291
+ width={24}
292
+ height={70}
293
+ style={{ marginLeft: 10, marginBottom: 10 }}
294
+ />
295
+ </View>
253
296
  <PlaceholderLine
254
- width={24}
255
- height={70}
256
- style={{ marginRight: 10, marginBottom: 10 }}
297
+ height={52}
257
298
  />
258
- <Placeholder style={{ paddingVertical: 10 }}>
259
- <PlaceholderLine width={60} style={{ marginBottom: 25 }} />
260
- <PlaceholderLine width={20} />
261
- </Placeholder>
262
- </View>
263
- </Placeholder>
299
+ </Placeholder>
300
+ </View>
264
301
  )}
265
302
  </InView>
266
303
  );
@@ -269,7 +306,7 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
269
306
  export const SingleProductCard = (props: SingleProductCardParams) => {
270
307
  const singleProductCardProps = {
271
308
  ...props,
272
- UIComponent: SinguleProductCardUI
309
+ UIComponent: SingleProductCardUI
273
310
  }
274
311
  return <SingleProductCardController {...singleProductCardProps} />
275
312
  }
@@ -1,17 +1,9 @@
1
1
  import styled, { css } from 'styled-components/native'
2
2
 
3
- export const CardContainer = styled.TouchableOpacity`
4
- flex: 1;
5
- flex-direction: ${(props : any) => props.showAddButton ? 'column' : 'row'};
6
- justify-content: space-between;
7
- align-items: center;
8
- padding: 12px;
9
- border-radius: 10px;
10
- position: relative;
11
- `
12
3
  export const CardInfo = styled.View`
13
4
  padding-start: 3px;
14
5
  flex: 1;
6
+ min-height: 85px;
15
7
  `
16
8
  export const SoldOut = styled.View`
17
9
  position: absolute;
@@ -30,6 +22,7 @@ export const QuantityContainer = styled.View`
30
22
  export const PricesContainer = styled.View`
31
23
  flex-direction: row;
32
24
  align-items: center;
25
+ margin-vertical: 6px;
33
26
  `
34
27
 
35
28
  export const LogoWrapper = styled.View`
@@ -1,6 +1,6 @@
1
1
  import React, { useState, useEffect } from 'react'
2
- import { useLanguage } from 'ordering-components/native'
3
- import { OText, OButton, OInput } from '../shared'
2
+ import { useLanguage, useUtils } from 'ordering-components/native'
3
+ import { OText, OButton, OInput, OIcon } from '../shared'
4
4
  import { StyleSheet, TouchableOpacity, View } from 'react-native'
5
5
  import AntDesignIcons from 'react-native-vector-icons/AntDesign'
6
6
  import { useTheme } from 'styled-components/native'
@@ -14,7 +14,9 @@ import {
14
14
  LikeHandsActionContainer,
15
15
  LikeHandsButton,
16
16
  CommentsButtonGroup,
17
+ LogoWrapper,
17
18
  } from './styles'
19
+ import FastImage from 'react-native-fast-image'
18
20
 
19
21
  export const SingleProductReview = (props: SingleProductReviewParams) => {
20
22
  const {
@@ -25,6 +27,7 @@ export const SingleProductReview = (props: SingleProductReviewParams) => {
25
27
 
26
28
  const [, t] = useLanguage()
27
29
  const theme = useTheme()
30
+ const [{ optimizeImage }] = useUtils()
28
31
 
29
32
  const styles = StyleSheet.create({
30
33
  inputTextArea: {
@@ -40,6 +43,12 @@ export const SingleProductReview = (props: SingleProductReviewParams) => {
40
43
  justifyContent: 'center',
41
44
  marginVertical: 10,
42
45
  },
46
+ productStyle: {
47
+ width: 80,
48
+ height: 80,
49
+ marginLeft: 'auto',
50
+ marginRight: 'auto'
51
+ }
43
52
  })
44
53
 
45
54
  const [comments, setComments] = useState<Array<any>>([])
@@ -55,6 +64,12 @@ export const SingleProductReview = (props: SingleProductReviewParams) => {
55
64
  return found
56
65
  }
57
66
 
67
+ const handleChangeQualification = (index: number) => {
68
+ if (qualification === index) return
69
+ setQualification(index)
70
+ setComments([])
71
+ }
72
+
58
73
  const handleChangeComment = (commentItem: any) => {
59
74
  const found = comments.find((comment: any) => comment?.key === commentItem.key)
60
75
  if (found) {
@@ -100,16 +115,34 @@ export const SingleProductReview = (props: SingleProductReviewParams) => {
100
115
  return (
101
116
  <>
102
117
  <ProductContainer>
118
+ <LogoWrapper>
119
+ {product?.images ? (
120
+ <FastImage
121
+ style={styles.productStyle}
122
+ source={{
123
+ uri: optimizeImage(product?.images, 'h_250,c_limit'),
124
+ priority: FastImage.priority.normal,
125
+ }}
126
+ resizeMode={FastImage.resizeMode.cover}
127
+ />
128
+ ) : (
129
+ <OIcon
130
+ src={theme?.images?.dummies?.product}
131
+ width={80}
132
+ height={80}
133
+ />
134
+ )}
135
+ </LogoWrapper>
103
136
  <ProductHeader>
104
137
  <OText numberOfLines={1} style={{ flex: 1 }} color={theme.colors.textNormal}>{product?.name}</OText>
105
138
  <LikeHandsActionContainer>
106
139
  <LikeHandsButton
107
140
  isLike
108
- onPress={() => setQualification(5)}
141
+ onPress={() => handleChangeQualification(5)}
109
142
  >
110
143
  <AntDesignIcons name='like2' size={20} color={qualification === 5 ? theme.colors.primary : theme.colors.lightGray} />
111
144
  </LikeHandsButton>
112
- <LikeHandsButton onPress={() => setQualification(1)}>
145
+ <LikeHandsButton onPress={() => handleChangeQualification(1)}>
113
146
  <AntDesignIcons name='dislike2' size={20} color={qualification === 1 ? theme.colors.primary : theme.colors.lightGray} />
114
147
  </LikeHandsButton>
115
148
  </LikeHandsActionContainer>
@@ -129,7 +162,7 @@ export const SingleProductReview = (props: SingleProductReviewParams) => {
129
162
  style={{ height: 35, paddingLeft: 5, paddingRight: 5, marginHorizontal: 3, marginVertical: 10 }}
130
163
  imgRightSrc={isSelectedComment(commentItem.key) ? theme.images.general.close : null}
131
164
  imgRightStyle={{ tintColor: theme.colors.white, right: 5, margin: 5 }}
132
- onClick={() => handleChangeComment(commentItem) }
165
+ onClick={() => handleChangeComment(commentItem)}
133
166
  />
134
167
  ))}
135
168
  </CommentsButtonGroup>
@@ -15,6 +15,18 @@ export const LikeHandsActionContainer = styled.View`
15
15
  flex-direction: row;
16
16
  `
17
17
 
18
+ export const LogoWrapper = styled.View`
19
+ shadowRadius: 3;
20
+ shadowOffset: { width: 1, height: 4 };
21
+ elevation: 3;
22
+ borderRadius: 8;
23
+ shadowOpacity: 0.1;
24
+ overflow: hidden;
25
+ width: 80;
26
+ marginLeft: auto;
27
+ marginRight: auto;
28
+ `
29
+
18
30
  export const LikeHandsButton = styled.TouchableOpacity`
19
31
  ${(props: any) => props.isLike && css`
20
32
  margin-horizontal: 15px;
@@ -128,7 +128,7 @@ const styles = StyleSheet.create({
128
128
  },
129
129
  cardsList: {
130
130
  width: '100%',
131
- maxHeight: 130
131
+ maxHeight: 150
132
132
  },
133
133
  })
134
134
 
@@ -61,7 +61,9 @@ const StripeElementsFormUI = (props: any) => {
61
61
  }
62
62
 
63
63
  if (user?.address) {
64
- billingDetails.address.line1 = user?.address
64
+ billingDetails.address = {
65
+ line1: user?.address
66
+ }
65
67
  }
66
68
 
67
69
  const createPayMethod = async () => {
@@ -71,7 +73,13 @@ const StripeElementsFormUI = (props: any) => {
71
73
  }
72
74
  try {
73
75
  setCreatePmLoading(true)
74
- const { paymentMethod } = await createPaymentMethod(params);
76
+ const { paymentMethod, error } = await createPaymentMethod(params);
77
+
78
+ if (error) {
79
+ setErrors(error?.message);
80
+ setCreatePmLoading(false)
81
+ return
82
+ }
75
83
 
76
84
  setCreatePmLoading(false)
77
85
  handleSource && handleSource({
@@ -187,6 +195,9 @@ const StripeElementsFormUI = (props: any) => {
187
195
  cardStyle={{
188
196
  backgroundColor: '#FFFFFF',
189
197
  textColor: '#000000',
198
+ borderWidth: 1,
199
+ borderRadius: 8,
200
+ borderColor: theme.colors.border
190
201
  }}
191
202
  style={{
192
203
  width: '100%',