ordering-ui-react-native 0.16.64 → 0.16.65-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 +31 -31
  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 +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/OrdersListManager/index.tsx +10 -3
  36. package/themes/business/src/components/OrdersOption/index.tsx +74 -76
  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 +22 -10
  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 +49 -33
  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 +93 -98
  96. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  97. package/themes/original/src/components/BusinessesListing/index.tsx +13 -8
  98. package/themes/original/src/components/Cart/index.tsx +74 -21
  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 +47 -37
  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 +131 -76
  134. package/themes/original/src/components/MultiOrdersDetails/index.tsx +60 -33
  135. package/themes/original/src/components/MyOrders/index.tsx +86 -20
  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 +212 -253
  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 +105 -70
  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,19 +5,21 @@ import {
5
5
  useOrder,
6
6
  useUtils,
7
7
  useSession,
8
- useOrderingTheme,
8
+ ToastType,
9
+ useToast,
9
10
  SingleProductCard as SingleProductCardController
10
11
  } from 'ordering-components/native';
11
12
  import { useTheme } from 'styled-components/native';
12
13
  import { SingleProductCardParams } from '../../types';
13
- import { CardContainer, CardInfo, SoldOut, QuantityContainer, PricesContainer, RibbonBox, LogoWrapper } from './styles';
14
- 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';
15
16
  import { InView } from 'react-native-intersection-observer'
16
17
  import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
17
- import { OButton, OText } from '../shared';
18
+ import { OButton, OIcon, OText } from '../shared';
18
19
  import FastImage from 'react-native-fast-image'
19
- import IconAntDesign from 'react-native-vector-icons/AntDesign'
20
20
  import { shape } from '../../utils';
21
+ import { LottieAnimation } from '../LottieAnimation';
22
+ import { CardAnimation } from '../shared/CardAnimation'
21
23
 
22
24
  function SingleProductCardPropsAreEqual(prevProps: any, nextProps: any) {
23
25
  return JSON.stringify(prevProps.product) === JSON.stringify(nextProps.product) &&
@@ -26,7 +28,7 @@ function SingleProductCardPropsAreEqual(prevProps: any, nextProps: any) {
26
28
  prevProps.categoryState === nextProps.categoryState
27
29
  }
28
30
 
29
- const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
31
+ const SingleProductCardUI = React.memo((props: SingleProductCardParams) => {
30
32
  const {
31
33
  product,
32
34
  isSoldOut,
@@ -36,19 +38,29 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
36
38
  handleFavoriteProduct,
37
39
  enableIntersection,
38
40
  navigation,
39
- businessId
41
+ businessId,
42
+ isPreviously
40
43
  } = props;
41
44
 
42
45
  const theme = useTheme();
43
- const [orderingTheme] = useOrderingTheme()
44
- const hideAddButton = orderingTheme?.theme?.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?.toLowerCase() === 'chew'
48
+
49
+ const textSize = isChewLayout ? 12 : 10
45
50
 
46
51
  const styles = StyleSheet.create({
47
52
  container: {
48
53
  borderWidth: 1,
49
- borderRadius: 7.6,
50
54
  borderColor: theme.colors.border,
51
- 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'
52
64
  },
53
65
  titleWrapper: {
54
66
  flexDirection: 'row',
@@ -68,14 +80,14 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
68
80
  textTransform: 'uppercase',
69
81
  },
70
82
  productStyle: {
71
- width: 75,
72
- height: 75,
83
+ width: 85,
84
+ height: 85,
73
85
  borderRadius: 7.6
74
86
  },
75
87
  quantityContainer: {
76
88
  position: 'absolute',
77
- left: '100%',
78
- bottom: '100%',
89
+ right: 0,
90
+ top: 0,
79
91
  width: 25,
80
92
  height: 25,
81
93
  textAlign: 'center',
@@ -94,8 +106,9 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
94
106
  const [, t] = useLanguage();
95
107
  const [stateConfig] = useConfig();
96
108
  const [{ auth }] = useSession()
97
- const [{ parsePrice, optimizeImage }] = useUtils();
109
+ const [{ parsePrice, optimizeImage, parseDate }] = useUtils();
98
110
  const [orderState] = useOrder()
111
+ const [, { showToast }] = useToast()
99
112
  const [isIntersectionObserver, setIsIntersectionObserver] = useState(!enableIntersection)
100
113
 
101
114
  const editMode = typeof product?.code !== 'undefined';
@@ -130,22 +143,35 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
130
143
  }
131
144
  }
132
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
+
133
160
  return (
134
- <InView style={{ minHeight: 200 }} triggerOnce={true} onChange={(inView: boolean) => setIsIntersectionObserver(true)}>
161
+ <InView style={{ minHeight: hideAddButton ? 125 : 190 }} triggerOnce={true} onChange={(inView: boolean) => handleChangeIntersection()}>
135
162
  {isIntersectionObserver ? (
136
- <CardContainer
137
- showAddButton={!hideAddButton}
163
+ <CardAnimation
164
+ onClick={() => handleClickproduct()}
138
165
  style={[
139
166
  styles.container,
140
167
  (isSoldOut || maxProductQuantity <= 0) && styles.soldOutBackgroundStyle,
141
- (style && { ...style }),
168
+ (style && { ...style })
142
169
  ]}
143
- onPress={() => onProductClick?.(product)}
144
170
  >
145
171
  <View style={{ flexDirection: 'row' }}>
146
172
  {productAddedToCartLength > 0 && (
147
173
  <QuantityContainer style={[styles.quantityContainer, {
148
- transform: [{ translateX: 10 }, { translateY: -10 }],
174
+ transform: [{ translateX: 25 }, { translateY: -25 }],
149
175
  }]}>
150
176
  <OText size={12} color={theme.colors.white}>{productAddedToCartLength.toString()}</OText>
151
177
  </QuantityContainer>
@@ -153,47 +179,61 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
153
179
  <CardInfo>
154
180
  <View style={styles.titleWrapper}>
155
181
  <OText
156
- size={12}
182
+ size={textSize + 2}
157
183
  weight={'500'}
158
184
  numberOfLines={1}
159
185
  ellipsizeMode="tail"
160
186
  style={{ ...styles.line18, flex: 1 }}>
161
187
  {product?.name}
162
188
  </OText>
163
- <TouchableOpacity
164
- onPress={handleChangeFavorite}
165
- >
166
- <IconAntDesign
167
- name={product?.favorite ? 'heart' : 'hearto'}
168
- color={theme.colors.danger5}
169
- 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}
170
198
  />
171
- </TouchableOpacity>
199
+ )}
172
200
  </View>
173
201
  <PricesContainer>
174
- <OText color={theme.colors.primary}>{product?.price ? parsePrice(product?.price) : ''}</OText>
175
- {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 && (
176
206
  <OText style={styles.regularPriceStyle}>{product?.offer_price ? parsePrice(product?.offer_price) : ''}</OText>
177
207
  )}
178
208
  </PricesContainer>
179
209
  <OText
180
- size={10}
181
- numberOfLines={2}
210
+ size={textSize}
211
+ numberOfLines={!isPreviously ? 2 : 1}
182
212
  ellipsizeMode="tail"
183
213
  color={theme.colors.textSecondary}
184
214
  style={styles.line15}>
185
215
  {product?.description}
186
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
+ )}
187
227
  </CardInfo>
188
228
  <LogoWrapper>
189
- {product?.ribbon?.enabled && (
229
+ {!!product?.ribbon?.enabled && (
190
230
  <RibbonBox
191
231
  bgColor={product?.ribbon?.color}
192
232
  isRoundRect={product?.ribbon?.shape === shape?.rectangleRound}
193
233
  isCapsule={product?.ribbon?.shape === shape?.capsuleShape}
194
234
  >
195
235
  <OText
196
- size={10}
236
+ size={textSize}
197
237
  weight={'400'}
198
238
  color={theme.colors.white}
199
239
  numberOfLines={2}
@@ -204,25 +244,14 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
204
244
  </OText>
205
245
  </RibbonBox>
206
246
  )}
207
- {product?.images ? (
208
- <FastImage
209
- style={styles.productStyle}
210
- source={{
211
- uri: optimizeImage(product?.images, 'h_250,c_limit'),
212
- priority: FastImage.priority.normal,
213
- }}
214
- resizeMode={FastImage.resizeMode.cover}
215
- />
216
- ) : (
217
- <FastImage
218
- style={styles.productStyle}
219
- source={{
220
- uri: Image.resolveAssetSource(theme.images.dummies.product).uri,
221
- priority: FastImage.priority.normal,
222
- }}
223
- resizeMode={FastImage.resizeMode.cover}
224
- />
225
- )}
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
+ />
226
255
  </LogoWrapper>
227
256
 
228
257
  {(isSoldOut || maxProductQuantity <= 0) && (
@@ -235,11 +264,12 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
235
264
  </View>
236
265
  {!hideAddButton && (
237
266
  <OButton
238
- onClick={() => onProductClick?.(product)}
267
+ onClick={() => handleClickproduct()}
239
268
  style={{
240
269
  width: '100%',
241
270
  borderRadius: 7.6,
242
271
  marginTop: 10,
272
+ height: 40
243
273
 
244
274
  }}
245
275
  bgColor={isSoldOut ? '#B8B8B8' : theme?.colors?.white}
@@ -248,21 +278,26 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
248
278
  text={t('ADD', 'Add')}
249
279
  />
250
280
  )}
251
- </CardContainer>
281
+ </CardAnimation>
252
282
  ) : (
253
- <Placeholder style={{ padding: 5 }} Animation={Fade}>
254
- <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>
255
296
  <PlaceholderLine
256
- width={24}
257
- height={70}
258
- style={{ marginRight: 10, marginBottom: 10 }}
297
+ height={52}
259
298
  />
260
- <Placeholder style={{ paddingVertical: 10 }}>
261
- <PlaceholderLine width={60} style={{ marginBottom: 25 }} />
262
- <PlaceholderLine width={20} />
263
- </Placeholder>
264
- </View>
265
- </Placeholder>
299
+ </Placeholder>
300
+ </View>
266
301
  )}
267
302
  </InView>
268
303
  );
@@ -271,7 +306,7 @@ const SinguleProductCardUI = React.memo((props: SingleProductCardParams) => {
271
306
  export const SingleProductCard = (props: SingleProductCardParams) => {
272
307
  const singleProductCardProps = {
273
308
  ...props,
274
- UIComponent: SinguleProductCardUI
309
+ UIComponent: SingleProductCardUI
275
310
  }
276
311
  return <SingleProductCardController {...singleProductCardProps} />
277
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%',