ordering-ui-react-native 0.16.57 → 0.16.58-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 (199) 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 +33 -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 +26 -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/UserFormDetails/index.tsx +5 -2
  53. package/themes/business/src/components/UserProfileForm/index.tsx +2 -0
  54. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  55. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  56. package/themes/business/src/components/shared/OLink.tsx +33 -13
  57. package/themes/business/src/components/shared/OText.tsx +8 -2
  58. package/themes/business/src/types/index.tsx +25 -11
  59. package/themes/business/src/utils/index.tsx +10 -0
  60. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  61. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  62. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  63. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  64. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  65. package/themes/kiosk/src/components/LoginForm/index.tsx +121 -10
  66. package/themes/kiosk/src/components/LoginForm/styles.tsx +5 -0
  67. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  68. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  69. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  70. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  71. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  72. package/themes/kiosk/src/types/index.d.ts +2 -0
  73. package/themes/original/index.tsx +8 -0
  74. package/themes/original/src/components/AddressDetails/index.tsx +10 -8
  75. package/themes/original/src/components/AddressForm/index.tsx +153 -137
  76. package/themes/original/src/components/AddressList/index.tsx +1 -1
  77. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  78. package/themes/original/src/components/BusinessBasicInformation/index.tsx +53 -37
  79. package/themes/original/src/components/BusinessController/index.tsx +112 -48
  80. package/themes/original/src/components/BusinessController/styles.tsx +14 -9
  81. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  82. package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -6
  83. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  84. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  85. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  86. package/themes/original/src/components/BusinessListingSearch/index.tsx +80 -138
  87. package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
  88. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  89. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  90. package/themes/original/src/components/BusinessProductsList/index.tsx +59 -61
  91. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  92. package/themes/original/src/components/BusinessProductsListing/index.tsx +177 -81
  93. package/themes/original/src/components/BusinessProductsListing/styles.tsx +14 -12
  94. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
  95. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  96. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +112 -107
  97. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  98. package/themes/original/src/components/BusinessesListing/index.tsx +16 -9
  99. package/themes/original/src/components/Cart/index.tsx +108 -18
  100. package/themes/original/src/components/Cart/styles.tsx +4 -0
  101. package/themes/original/src/components/CartContent/index.tsx +31 -17
  102. package/themes/original/src/components/CartContent/styles.tsx +1 -1
  103. package/themes/original/src/components/Checkout/index.tsx +114 -117
  104. package/themes/original/src/components/Checkout/styles.tsx +4 -3
  105. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  106. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  107. package/themes/original/src/components/DriverTips/index.tsx +4 -4
  108. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  109. package/themes/original/src/components/FavoriteList/index.tsx +69 -45
  110. package/themes/original/src/components/FloatingButton/index.tsx +0 -1
  111. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  112. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  113. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  114. package/themes/original/src/components/GoogleMap/index.tsx +10 -1
  115. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +25 -10
  116. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +4 -0
  117. package/themes/original/src/components/HelpGuide/index.tsx +9 -8
  118. package/themes/original/src/components/HelpOrder/index.tsx +9 -8
  119. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  120. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  121. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  122. package/themes/original/src/components/LoginForm/index.tsx +98 -41
  123. package/themes/original/src/components/LottieAnimation/index.tsx +69 -0
  124. package/themes/original/src/components/Messages/index.tsx +35 -20
  125. package/themes/original/src/components/MomentOption/index.tsx +8 -6
  126. package/themes/original/src/components/MultiCart/index.tsx +63 -0
  127. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
  128. package/themes/original/src/components/MultiCheckout/index.tsx +96 -65
  129. package/themes/original/src/components/MultiOrdersDetails/index.tsx +34 -16
  130. package/themes/original/src/components/MyOrders/index.tsx +89 -25
  131. package/themes/original/src/components/NavBar/index.tsx +11 -5
  132. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  133. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  134. package/themes/original/src/components/Notifications/index.tsx +148 -0
  135. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  136. package/themes/original/src/components/OrderDetails/index.tsx +114 -15
  137. package/themes/original/src/components/OrderDetails/styles.tsx +15 -2
  138. package/themes/original/src/components/OrderItAgain/index.tsx +75 -0
  139. package/themes/original/src/components/OrderItAgain/styles.tsx +10 -0
  140. package/themes/original/src/components/OrderProgress/index.tsx +77 -66
  141. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  142. package/themes/original/src/components/OrderSummary/index.tsx +2 -35
  143. package/themes/original/src/components/OrderTypeSelector/index.tsx +85 -36
  144. package/themes/original/src/components/OrderTypeSelector/styles.tsx +19 -1
  145. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +94 -98
  146. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  147. package/themes/original/src/components/OrdersOption/index.tsx +95 -55
  148. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  149. package/themes/original/src/components/PaymentOptions/index.tsx +1 -2
  150. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  151. package/themes/original/src/components/PlaceSpot/index.tsx +249 -47
  152. package/themes/original/src/components/PlaceSpot/styles.tsx +0 -2
  153. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  154. package/themes/original/src/components/ProductForm/index.tsx +367 -384
  155. package/themes/original/src/components/ProductForm/styles.tsx +7 -12
  156. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  157. package/themes/original/src/components/ProductOption/index.tsx +1 -1
  158. package/themes/original/src/components/ProductOptionSubOption/index.tsx +16 -8
  159. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +0 -1
  160. package/themes/original/src/components/ProfessionalFilter/index.tsx +2 -1
  161. package/themes/original/src/components/ProfessionalProfile/index.tsx +19 -8
  162. package/themes/original/src/components/Promotions/index.tsx +232 -219
  163. package/themes/original/src/components/Promotions/styles.tsx +7 -2
  164. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  165. package/themes/original/src/components/ReviewOrder/index.tsx +43 -11
  166. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  167. package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
  168. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  169. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  170. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  171. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  172. package/themes/original/src/components/ServiceForm/index.tsx +330 -266
  173. package/themes/original/src/components/SignupForm/index.tsx +134 -89
  174. package/themes/original/src/components/SingleOrderCard/index.tsx +224 -132
  175. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  176. package/themes/original/src/components/SingleProductCard/index.tsx +116 -72
  177. package/themes/original/src/components/SingleProductCard/styles.tsx +2 -9
  178. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  179. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  180. package/themes/original/src/components/StripeElementsForm/index.tsx +13 -2
  181. package/themes/original/src/components/UpsellingProducts/index.tsx +15 -5
  182. package/themes/original/src/components/UserDetails/index.tsx +5 -3
  183. package/themes/original/src/components/UserFormDetails/index.tsx +6 -48
  184. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  185. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  186. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  187. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  188. package/themes/original/src/components/Wallets/index.tsx +176 -164
  189. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  190. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  191. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  192. package/themes/original/src/components/shared/OBottomPopup.tsx +11 -7
  193. package/themes/original/src/components/shared/OButton.tsx +8 -3
  194. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  195. package/themes/original/src/components/shared/OInput.tsx +10 -1
  196. package/themes/original/src/layouts/Container.tsx +13 -9
  197. package/themes/original/src/types/index.tsx +63 -8
  198. package/themes/original/src/utils/index.tsx +103 -58
  199. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -4,18 +4,22 @@ import {
4
4
  useConfig,
5
5
  useOrder,
6
6
  useUtils,
7
+ useSession,
8
+ ToastType,
9
+ useToast,
7
10
  SingleProductCard as SingleProductCardController
8
11
  } from 'ordering-components/native';
9
12
  import { useTheme } from 'styled-components/native';
10
13
  import { SingleProductCardParams } from '../../types';
11
- import { CardContainer, CardInfo, SoldOut, QuantityContainer, PricesContainer, RibbonBox, LogoWrapper } from './styles';
12
- 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';
13
16
  import { InView } from 'react-native-intersection-observer'
14
17
  import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
15
- import { OButton, OText } from '../shared';
18
+ import { OButton, OIcon, OText } from '../shared';
16
19
  import FastImage from 'react-native-fast-image'
17
- import IconAntDesign from 'react-native-vector-icons/AntDesign'
18
20
  import { shape } from '../../utils';
21
+ import { LottieAnimation } from '../LottieAnimation';
22
+ import { CardAnimation } from '../shared/CardAnimation'
19
23
 
20
24
  function SingleProductCardPropsAreEqual(prevProps: any, nextProps: any) {
21
25
  return JSON.stringify(prevProps.product) === JSON.stringify(nextProps.product) &&
@@ -24,7 +28,7 @@ function SingleProductCardPropsAreEqual(prevProps: any, nextProps: any) {
24
28
  prevProps.categoryState === nextProps.categoryState
25
29
  }
26
30
 
27
- const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
31
+ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
28
32
  const {
29
33
  product,
30
34
  isSoldOut,
@@ -32,18 +36,31 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
32
36
  productAddedToCartLength,
33
37
  style,
34
38
  handleFavoriteProduct,
35
- enableIntersection
39
+ enableIntersection,
40
+ navigation,
41
+ businessId,
42
+ isPreviously
36
43
  } = props;
37
44
 
38
45
  const theme = useTheme();
39
- 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
40
50
 
41
51
  const styles = StyleSheet.create({
42
52
  container: {
43
53
  borderWidth: 1,
44
- borderRadius: 7.6,
45
54
  borderColor: theme.colors.border,
46
- 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'
47
64
  },
48
65
  titleWrapper: {
49
66
  flexDirection: 'row',
@@ -63,14 +80,14 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
63
80
  textTransform: 'uppercase',
64
81
  },
65
82
  productStyle: {
66
- width: 75,
67
- height: 75,
83
+ width: 85,
84
+ height: 85,
68
85
  borderRadius: 7.6
69
86
  },
70
87
  quantityContainer: {
71
88
  position: 'absolute',
72
- left: '100%',
73
- bottom: '100%',
89
+ right: 0,
90
+ top: 0,
74
91
  width: 25,
75
92
  height: 25,
76
93
  textAlign: 'center',
@@ -86,11 +103,12 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
86
103
  }
87
104
  });
88
105
 
89
-
90
106
  const [, t] = useLanguage();
91
107
  const [stateConfig] = useConfig();
92
- const [{ parsePrice, optimizeImage }] = useUtils();
108
+ const [{ auth }] = useSession()
109
+ const [{ parsePrice, optimizeImage, parseDate }] = useUtils();
93
110
  const [orderState] = useOrder()
111
+ const [, { showToast }] = useToast()
94
112
  const [isIntersectionObserver, setIsIntersectionObserver] = useState(!enableIntersection)
95
113
 
96
114
  const editMode = typeof product?.code !== 'undefined';
@@ -118,25 +136,42 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
118
136
  );
119
137
 
120
138
  const handleChangeFavorite = () => {
121
- handleFavoriteProduct && handleFavoriteProduct(!product?.favorite)
139
+ if (auth) {
140
+ handleFavoriteProduct && handleFavoriteProduct(!product?.favorite)
141
+ } else {
142
+ navigation && navigation.navigate('Login');
143
+ }
144
+ }
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)
122
158
  }
123
159
 
124
160
  return (
125
- <InView style={{ minHeight: 200 }} triggerOnce={true} onChange={(inView: boolean) => setIsIntersectionObserver(true)}>
161
+ <InView style={{ minHeight: hideAddButton ? 125 : 190 }} triggerOnce={true} onChange={(inView: boolean) => handleChangeIntersection()}>
126
162
  {isIntersectionObserver ? (
127
- <CardContainer
128
- showAddButton={showAddButton}
163
+ <CardAnimation
164
+ onClick={() => handleClickproduct()}
129
165
  style={[
130
166
  styles.container,
131
167
  (isSoldOut || maxProductQuantity <= 0) && styles.soldOutBackgroundStyle,
132
- (style && { ...style }),
168
+ (style && { ...style })
133
169
  ]}
134
- onPress={() => onProductClick?.(product)}
135
170
  >
136
171
  <View style={{ flexDirection: 'row' }}>
137
172
  {productAddedToCartLength > 0 && (
138
173
  <QuantityContainer style={[styles.quantityContainer, {
139
- transform: [{ translateX: 10 }, { translateY: -10 }],
174
+ transform: [{ translateX: 25 }, { translateY: -25 }],
140
175
  }]}>
141
176
  <OText size={12} color={theme.colors.white}>{productAddedToCartLength.toString()}</OText>
142
177
  </QuantityContainer>
@@ -144,47 +179,61 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
144
179
  <CardInfo>
145
180
  <View style={styles.titleWrapper}>
146
181
  <OText
147
- size={12}
182
+ size={textSize + 2}
148
183
  weight={'500'}
149
184
  numberOfLines={1}
150
185
  ellipsizeMode="tail"
151
- style={styles.line18}>
186
+ style={{ ...styles.line18, flex: 1 }}>
152
187
  {product?.name}
153
188
  </OText>
154
- <TouchableOpacity
155
- onPress={handleChangeFavorite}
156
- >
157
- <IconAntDesign
158
- name={product?.favorite ? 'heart' : 'hearto'}
159
- color={theme.colors.danger5}
160
- 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}
161
198
  />
162
- </TouchableOpacity>
199
+ )}
163
200
  </View>
164
201
  <PricesContainer>
165
- <OText color={theme.colors.primary}>{product?.price ? parsePrice(product?.price) : ''}</OText>
166
- {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 && (
167
206
  <OText style={styles.regularPriceStyle}>{product?.offer_price ? parsePrice(product?.offer_price) : ''}</OText>
168
207
  )}
169
208
  </PricesContainer>
170
209
  <OText
171
- size={10}
172
- numberOfLines={2}
210
+ size={textSize}
211
+ numberOfLines={!isPreviously ? 2 : 1}
173
212
  ellipsizeMode="tail"
174
213
  color={theme.colors.textSecondary}
175
214
  style={styles.line15}>
176
215
  {product?.description}
177
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
+ )}
178
227
  </CardInfo>
179
228
  <LogoWrapper>
180
- {product?.ribbon?.enabled && (
229
+ {!!product?.ribbon?.enabled && (
181
230
  <RibbonBox
182
231
  bgColor={product?.ribbon?.color}
183
232
  isRoundRect={product?.ribbon?.shape === shape?.rectangleRound}
184
233
  isCapsule={product?.ribbon?.shape === shape?.capsuleShape}
185
234
  >
186
235
  <OText
187
- size={10}
236
+ size={textSize}
188
237
  weight={'400'}
189
238
  color={theme.colors.white}
190
239
  numberOfLines={2}
@@ -195,25 +244,14 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
195
244
  </OText>
196
245
  </RibbonBox>
197
246
  )}
198
- {product?.images ? (
199
- <FastImage
200
- style={styles.productStyle}
201
- source={{
202
- uri: optimizeImage(product?.images, 'h_250,c_limit'),
203
- priority: FastImage.priority.normal,
204
- }}
205
- resizeMode={FastImage.resizeMode.cover}
206
- />
207
- ) : (
208
- <FastImage
209
- style={styles.productStyle}
210
- source={{
211
- uri: Image.resolveAssetSource(theme.images.dummies.product).uri,
212
- priority: FastImage.priority.normal,
213
- }}
214
- resizeMode={FastImage.resizeMode.cover}
215
- />
216
- )}
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
+ />
217
255
  </LogoWrapper>
218
256
 
219
257
  {(isSoldOut || maxProductQuantity <= 0) && (
@@ -224,13 +262,14 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
224
262
  </SoldOut>
225
263
  )}
226
264
  </View>
227
- {showAddButton && (
265
+ {!hideAddButton && (
228
266
  <OButton
229
- onClick={() => onProductClick?.(product)}
267
+ onClick={() => handleClickproduct()}
230
268
  style={{
231
269
  width: '100%',
232
270
  borderRadius: 7.6,
233
271
  marginTop: 10,
272
+ height: 40
234
273
 
235
274
  }}
236
275
  bgColor={isSoldOut ? '#B8B8B8' : theme?.colors?.white}
@@ -239,21 +278,26 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
239
278
  text={t('ADD', 'Add')}
240
279
  />
241
280
  )}
242
- </CardContainer>
281
+ </CardAnimation>
243
282
  ) : (
244
- <Placeholder style={{ padding: 5 }} Animation={Fade}>
245
- <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>
246
296
  <PlaceholderLine
247
- width={24}
248
- height={70}
249
- style={{ marginRight: 10, marginBottom: 10 }}
297
+ height={52}
250
298
  />
251
- <Placeholder style={{ paddingVertical: 10 }}>
252
- <PlaceholderLine width={60} style={{ marginBottom: 25 }} />
253
- <PlaceholderLine width={20} />
254
- </Placeholder>
255
- </View>
256
- </Placeholder>
299
+ </Placeholder>
300
+ </View>
257
301
  )}
258
302
  </InView>
259
303
  );
@@ -262,7 +306,7 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
262
306
  export const SingleProductCard = (props: SingleProductCardParams) => {
263
307
  const singleProductCardProps = {
264
308
  ...props,
265
- UIComponent: SinguleProductCardUI
309
+ UIComponent: SingleProductCardUI
266
310
  }
267
311
  return <SingleProductCardController {...singleProductCardProps} />
268
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;
@@ -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%',
@@ -1,5 +1,5 @@
1
1
  import React, { useState, useEffect } from 'react'
2
- import { Platform, StyleSheet, View } from 'react-native'
2
+ import { Platform, StyleSheet, TouchableOpacity, View } from 'react-native'
3
3
  import {
4
4
  UpsellingPage as UpsellingPageController,
5
5
  useUtils,
@@ -21,6 +21,7 @@ import {
21
21
  import { OrderSummary } from '../OrderSummary';
22
22
  import { ScrollView } from 'react-native-gesture-handler';
23
23
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
24
+ import AntDesignIcon from 'react-native-vector-icons/AntDesign'
24
25
 
25
26
  const UpsellingProductsUI = (props: UpsellingProductsParams) => {
26
27
  const {
@@ -71,9 +72,15 @@ const UpsellingProductsUI = (props: UpsellingProductsParams) => {
71
72
  },
72
73
  btnBackArrow: {
73
74
  borderWidth: 0,
75
+ width: 26,
76
+ height: 26,
74
77
  backgroundColor: theme.colors.clear,
78
+ borderColor: theme.colors.clear,
75
79
  shadowColor: theme.colors.clear,
76
- padding: 40,
80
+ paddingLeft: 0,
81
+ paddingRight: 0,
82
+ marginLeft: 20,
83
+ marginBottom: 10
77
84
  },
78
85
  })
79
86
 
@@ -139,7 +146,7 @@ const UpsellingProductsUI = (props: UpsellingProductsParams) => {
139
146
  </AddButton>
140
147
  </View>
141
148
  <View>
142
- <OIcon url={product.images} style={styles.imageStyle} />
149
+ <OIcon url={product?.images || theme?.images?.dummies?.product} style={styles.imageStyle} />
143
150
  </View>
144
151
  </Item>
145
152
  )) : (
@@ -161,11 +168,14 @@ const UpsellingProductsUI = (props: UpsellingProductsParams) => {
161
168
  <>
162
169
  <View style={{ ...styles.headerItem, flex: 1, marginTop: Platform.OS == 'ios' ? 35 : 70 }}>
163
170
  <OButton
164
- imgLeftSrc={theme.images.general.arrow_left}
165
171
  imgRightSrc={null}
166
172
  style={styles.btnBackArrow}
167
173
  onClick={() => onGoBack()}
168
- imgLeftStyle={{ tintColor: theme.colors.textNormal, width: 16 }}
174
+ icon={AntDesignIcon}
175
+ iconProps={{
176
+ name: 'arrowleft',
177
+ size: 26
178
+ }}
169
179
  />
170
180
  </View>
171
181
  <ScrollView style={{ marginTop: 10, marginBottom: props.isPage ? 40 : bottom + (Platform.OS == 'ios' ? 96 : 130) }} showsVerticalScrollIndicator={false}>
@@ -152,9 +152,11 @@ const UserDetailsUI = (props: any) => {
152
152
  {!(validationFields.loading || formState.loading) && (
153
153
  <UDContainer>
154
154
  <UDHeader>
155
- <OText size={16} lineHeight={24} weight={'500'} color={theme.colors.textNormal}>
156
- {t('CUSTOMER_DETAILS', 'Customer Details')}
157
- </OText>
155
+ {props.HeaderTitle ?? (
156
+ <OText size={16} lineHeight={24} weight={'500'} color={theme.colors.textNormal}>
157
+ {t('CUSTOMER_DETAILS', 'Customer Details')}
158
+ </OText>
159
+ )}
158
160
  {cartStatus !== 2 && !requiredFields && (
159
161
  !isEdit ? (
160
162
  <EditBtn onPress={() => toggleIsEdit()} activeOpacity={0.7}>