ordering-ui-react-native 0.17.50 → 0.17.51-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 (220) hide show
  1. package/package.json +8 -7
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessesListing/index.tsx +1 -1
  4. package/src/components/OrderCreating/index.tsx +1 -21
  5. package/src/components/PaymentOptionsWebView/index.tsx +29 -8
  6. package/src/components/PhoneInputNumber/index.tsx +6 -2
  7. package/src/components/StripeMethodForm/index.tsx +136 -102
  8. package/src/components/VerifyPhone/styles.tsx +1 -2
  9. package/src/components/shared/OToast.tsx +4 -4
  10. package/src/types/index.tsx +5 -0
  11. package/src/utils/index.tsx +7 -1
  12. package/themes/business/index.tsx +2 -0
  13. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +265 -240
  14. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  15. package/themes/business/src/components/BusinessController/index.tsx +0 -1
  16. package/themes/business/src/components/Chat/index.tsx +125 -113
  17. package/themes/business/src/components/DriverMap/index.tsx +17 -6
  18. package/themes/business/src/components/DriverSchedule/index.tsx +29 -2
  19. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  20. package/themes/business/src/components/LoginForm/Otp/index.tsx +120 -0
  21. package/themes/business/src/components/LoginForm/Otp/styles.tsx +7 -0
  22. package/themes/business/src/components/LoginForm/index.tsx +238 -80
  23. package/themes/business/src/components/LoginForm/styles.tsx +10 -0
  24. package/themes/business/src/components/MapView/index.tsx +10 -10
  25. package/themes/business/src/components/NewOrderNotification/index.tsx +35 -21
  26. package/themes/business/src/components/OrderDetails/Delivery.tsx +31 -5
  27. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +93 -50
  28. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +59 -62
  29. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
  30. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  31. package/themes/business/src/components/OrderMessage/index.tsx +18 -17
  32. package/themes/business/src/components/OrderSummary/index.tsx +113 -121
  33. package/themes/business/src/components/OrdersOption/index.tsx +32 -75
  34. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +249 -0
  35. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  36. package/themes/business/src/components/PreviousOrders/index.tsx +445 -243
  37. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  38. package/themes/business/src/components/ProductItemAccordion/index.tsx +27 -3
  39. package/themes/business/src/components/ReviewCustomer/index.tsx +29 -14
  40. package/themes/business/src/components/StoresList/index.tsx +2 -2
  41. package/themes/business/src/components/UserProfileForm/index.tsx +11 -13
  42. package/themes/business/src/components/shared/OLink.tsx +33 -13
  43. package/themes/business/src/components/shared/OModal.tsx +16 -9
  44. package/themes/business/src/components/shared/OText.tsx +8 -2
  45. package/themes/business/src/types/index.tsx +32 -2
  46. package/themes/business/src/utils/index.tsx +44 -1
  47. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  48. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  49. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  50. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  51. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  52. package/themes/kiosk/src/components/LoginForm/Otp/index.tsx +92 -0
  53. package/themes/kiosk/src/components/LoginForm/Otp/styles.tsx +7 -0
  54. package/themes/kiosk/src/components/LoginForm/index.tsx +480 -156
  55. package/themes/kiosk/src/components/LoginForm/styles.tsx +14 -1
  56. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  57. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  58. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  59. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +3 -2
  60. package/themes/kiosk/src/components/PhoneInputNumber/styles.tsx +1 -3
  61. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  62. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  63. package/themes/kiosk/src/components/shared/OModal.tsx +14 -11
  64. package/themes/kiosk/src/layouts/Container.tsx +7 -1
  65. package/themes/kiosk/src/types/index.d.ts +13 -0
  66. package/themes/kiosk/src/utils/index.tsx +15 -0
  67. package/themes/original/index.tsx +4 -0
  68. package/themes/original/src/components/AddressDetails/index.tsx +29 -11
  69. package/themes/original/src/components/AddressForm/index.tsx +79 -44
  70. package/themes/original/src/components/AddressList/index.tsx +27 -22
  71. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  72. package/themes/original/src/components/AnalyticsSegment/index.tsx +193 -10
  73. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  74. package/themes/original/src/components/AppleLogin/styles.tsx +3 -1
  75. package/themes/original/src/components/BusinessBasicInformation/index.tsx +160 -91
  76. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +9 -7
  77. package/themes/original/src/components/BusinessController/index.tsx +122 -68
  78. package/themes/original/src/components/BusinessController/styles.tsx +23 -4
  79. package/themes/original/src/components/BusinessFeaturedController/index.tsx +21 -54
  80. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +8 -0
  81. package/themes/original/src/components/BusinessInformation/index.tsx +110 -108
  82. package/themes/original/src/components/BusinessItemAccordion/index.tsx +23 -22
  83. package/themes/original/src/components/BusinessListingSearch/index.tsx +352 -326
  84. package/themes/original/src/components/BusinessPreorder/index.tsx +103 -19
  85. package/themes/original/src/components/BusinessProductsCategories/index.tsx +1 -2
  86. package/themes/original/src/components/BusinessProductsList/index.tsx +23 -14
  87. package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
  88. package/themes/original/src/components/BusinessProductsListing/UpsellingRedirect.tsx +1 -1
  89. package/themes/original/src/components/BusinessProductsListing/index.tsx +668 -514
  90. package/themes/original/src/components/BusinessProductsListing/styles.tsx +2 -2
  91. package/themes/original/src/components/BusinessReviews/index.tsx +3 -1
  92. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  93. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +95 -80
  94. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -11
  95. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  96. package/themes/original/src/components/Cart/index.tsx +100 -67
  97. package/themes/original/src/components/CartContent/index.tsx +115 -19
  98. package/themes/original/src/components/CartContent/styles.tsx +17 -7
  99. package/themes/original/src/components/Checkout/index.tsx +367 -174
  100. package/themes/original/src/components/Checkout/styles.tsx +4 -2
  101. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  102. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  103. package/themes/original/src/components/CouponControl/index.tsx +10 -3
  104. package/themes/original/src/components/DriverTips/index.tsx +52 -34
  105. package/themes/original/src/components/FacebookLogin/styles.tsx +3 -1
  106. package/themes/original/src/components/Favorite/index.tsx +8 -9
  107. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  108. package/themes/original/src/components/FavoriteList/index.tsx +51 -80
  109. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  110. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  111. package/themes/original/src/components/GPSButton/index.tsx +6 -4
  112. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  113. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +96 -0
  114. package/themes/original/src/components/GiftCard/GiftCardUI/styles.tsx +5 -0
  115. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +100 -0
  116. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +8 -0
  117. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +191 -0
  118. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +8 -0
  119. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +165 -0
  120. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +9 -0
  121. package/themes/original/src/components/GoogleLogin/styles.tsx +1 -1
  122. package/themes/original/src/components/GoogleMap/index.tsx +15 -4
  123. package/themes/original/src/components/Help/index.tsx +8 -8
  124. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +10 -31
  125. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +5 -3
  126. package/themes/original/src/components/HelpGuide/index.tsx +6 -6
  127. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  128. package/themes/original/src/components/HelpOrder/index.tsx +6 -15
  129. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  130. package/themes/original/src/components/Home/index.tsx +13 -4
  131. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  132. package/themes/original/src/components/LoginForm/Otp/index.tsx +55 -13
  133. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  134. package/themes/original/src/components/LoginForm/index.tsx +64 -26
  135. package/themes/original/src/components/LottieAnimation/index.tsx +89 -55
  136. package/themes/original/src/components/MessageListing/index.tsx +16 -42
  137. package/themes/original/src/components/Messages/index.tsx +32 -10
  138. package/themes/original/src/components/MomentOption/index.tsx +195 -88
  139. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  140. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +151 -49
  141. package/themes/original/src/components/MultiCheckout/index.tsx +308 -88
  142. package/themes/original/src/components/MultiCheckout/styles.tsx +3 -1
  143. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  144. package/themes/original/src/components/MultiOrdersDetails/index.tsx +68 -21
  145. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  146. package/themes/original/src/components/MyOrders/index.tsx +77 -52
  147. package/themes/original/src/components/NavBar/index.tsx +18 -18
  148. package/themes/original/src/components/NotFoundSource/index.tsx +14 -10
  149. package/themes/original/src/components/Notifications/index.tsx +46 -50
  150. package/themes/original/src/components/Notifications/styles.tsx +6 -3
  151. package/themes/original/src/components/OrderDetails/OrderEta.tsx +76 -0
  152. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +15 -3
  153. package/themes/original/src/components/OrderDetails/index.tsx +190 -358
  154. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  155. package/themes/original/src/components/OrderItAgain/index.tsx +3 -1
  156. package/themes/original/src/components/OrderProgress/index.tsx +93 -114
  157. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  158. package/themes/original/src/components/OrderSummary/index.tsx +85 -57
  159. package/themes/original/src/components/OrderTypeSelector/index.tsx +1 -1
  160. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +24 -19
  161. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +14 -14
  162. package/themes/original/src/components/OrdersOption/index.tsx +76 -66
  163. package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
  164. package/themes/original/src/components/PageBanner/index.tsx +107 -40
  165. package/themes/original/src/components/PageBanner/styles.tsx +4 -1
  166. package/themes/original/src/components/PaymentOptionCard/index.tsx +180 -0
  167. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  168. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  169. package/themes/original/src/components/PaymentOptions/index.tsx +64 -7
  170. package/themes/original/src/components/PhoneInputNumber/index.tsx +3 -3
  171. package/themes/original/src/components/PlaceSpot/index.tsx +12 -6
  172. package/themes/original/src/components/ProductForm/index.tsx +114 -36
  173. package/themes/original/src/components/ProductForm/styles.tsx +5 -7
  174. package/themes/original/src/components/ProductItemAccordion/index.tsx +22 -19
  175. package/themes/original/src/components/ProductOptionSubOption/index.tsx +24 -14
  176. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +3 -4
  177. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  178. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -50
  179. package/themes/original/src/components/ProfessionalProfile/index.tsx +36 -7
  180. package/themes/original/src/components/Promotions/index.tsx +234 -220
  181. package/themes/original/src/components/Promotions/styles.tsx +10 -3
  182. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  183. package/themes/original/src/components/ReviewOrder/index.tsx +26 -9
  184. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  185. package/themes/original/src/components/ReviewProducts/index.tsx +23 -11
  186. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  187. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  188. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  189. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  190. package/themes/original/src/components/ServiceForm/index.tsx +66 -17
  191. package/themes/original/src/components/Sessions/index.tsx +11 -8
  192. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  193. package/themes/original/src/components/SignupForm/index.tsx +43 -20
  194. package/themes/original/src/components/SingleOrderCard/index.tsx +130 -52
  195. package/themes/original/src/components/SingleOrderCard/styles.tsx +11 -2
  196. package/themes/original/src/components/SingleProductCard/index.tsx +72 -34
  197. package/themes/original/src/components/SingleProductCard/styles.tsx +22 -4
  198. package/themes/original/src/components/SingleProductReview/styles.tsx +1 -1
  199. package/themes/original/src/components/StripeCardsList/index.tsx +13 -3
  200. package/themes/original/src/components/StripeElementsForm/index.tsx +67 -34
  201. package/themes/original/src/components/UpsellingProducts/index.tsx +238 -224
  202. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  203. package/themes/original/src/components/UserDetails/index.tsx +8 -4
  204. package/themes/original/src/components/UserFormDetails/index.tsx +76 -7
  205. package/themes/original/src/components/UserFormDetails/styles.tsx +1 -1
  206. package/themes/original/src/components/UserProfile/index.tsx +88 -79
  207. package/themes/original/src/components/UserProfileForm/index.tsx +27 -29
  208. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  209. package/themes/original/src/components/WalletTransactionItem/index.tsx +2 -2
  210. package/themes/original/src/components/WalletTransactions/index.tsx +3 -3
  211. package/themes/original/src/components/Wallets/index.tsx +67 -24
  212. package/themes/original/src/components/Wallets/styles.tsx +3 -4
  213. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  214. package/themes/original/src/components/shared/OButton.tsx +6 -2
  215. package/themes/original/src/components/shared/OInput.tsx +16 -2
  216. package/themes/original/src/components/shared/OModal.tsx +3 -3
  217. package/themes/original/src/layouts/Container.tsx +1 -1
  218. package/themes/original/src/types/index.tsx +40 -11
  219. package/themes/original/src/utils/index.tsx +375 -58
  220. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -18,8 +18,11 @@ import {
18
18
  useOrder,
19
19
  useUtils,
20
20
  ToastType,
21
- useToast
21
+ useToast,
22
+ useConfig,
23
+ useEvent
22
24
  } from 'ordering-components/native';
25
+ import uuid from 'react-native-uuid';
23
26
  import { useTheme } from 'styled-components/native';
24
27
  import { ProductIngredient } from '../ProductIngredient';
25
28
  import { ProductOption } from '../ProductOption';
@@ -27,6 +30,7 @@ import Swiper from 'react-native-swiper'
27
30
  import FastImage from 'react-native-fast-image';
28
31
  import IconAntDesign from 'react-native-vector-icons/AntDesign';
29
32
  import YoutubePlayer from "react-native-youtube-iframe"
33
+ import ReactNativeHapticFeedback from "react-native-haptic-feedback";
30
34
 
31
35
  import {
32
36
  WrapHeader,
@@ -50,6 +54,8 @@ import { ScrollView } from 'react-native-gesture-handler';
50
54
  import { ProductOptionSubOption } from '../ProductOptionSubOption';
51
55
  import { NotFoundSource } from '../NotFoundSource';
52
56
  import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder';
57
+ import NavBar from '../NavBar';
58
+ import { orderTypeList, vibrateApp } from '../../utils';
53
59
  const windowWidth = Dimensions.get('window').width;
54
60
 
55
61
  export const ProductOptionsUI = (props: any) => {
@@ -69,11 +75,16 @@ export const ProductOptionsUI = (props: any) => {
69
75
  handleChangeSuboptionState,
70
76
  handleChangeCommentState,
71
77
  productObject,
72
- productAddedToCartLength
78
+ productAddedToCartLength,
79
+ actionStatus,
80
+ handleCreateGuestUser
73
81
  } = props;
74
82
 
75
83
  const theme = useTheme();
76
84
  const [, { showToast }] = useToast()
85
+ const [events] = useEvent()
86
+
87
+ const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
77
88
 
78
89
  const styles = StyleSheet.create({
79
90
  mainContainer: {
@@ -126,6 +137,7 @@ export const ProductOptionsUI = (props: any) => {
126
137
  },
127
138
  slide1: {
128
139
  flex: 1,
140
+ alignItems: 'center'
129
141
  },
130
142
  mainSwiper: {
131
143
  height: 258,
@@ -162,6 +174,10 @@ export const ProductOptionsUI = (props: any) => {
162
174
  justifyContent: 'space-between',
163
175
  width: '100%',
164
176
  marginTop: 10
177
+ },
178
+ wrapperNavbar: {
179
+ paddingHorizontal: 40,
180
+ paddingTop: 0,
165
181
  }
166
182
  });
167
183
 
@@ -169,6 +185,7 @@ export const ProductOptionsUI = (props: any) => {
169
185
  const [, t] = useLanguage();
170
186
  const [orderState] = useOrder();
171
187
  const [{ auth }] = useSession();
188
+ const [{ configs }] = useConfig()
172
189
  const { product, loading, error } = productObject;
173
190
  const [gallery, setGallery] = useState([])
174
191
  const [thumbsSwiper, setThumbsSwiper] = useState(0)
@@ -188,6 +205,19 @@ export const ProductOptionsUI = (props: any) => {
188
205
  const [summaryRefHeight, setSummaryRefHeight] = useState(0)
189
206
  const [isScrollAvailable, setIsScrollAvailable] = useState(null)
190
207
  const [editionsLayoutY, setEditionsLayoutY] = useState(null)
208
+ const [viewedProduct, setViewedProduct] = useState<any>(null)
209
+ const [showTitle, setShowTitle] = useState(false)
210
+
211
+ const guestCheckoutEnabled = configs?.guest_checkout_enabled?.value === '1'
212
+ const orderTypeEnabled = !orderTypeList[orderState?.options?.type - 1] || configs?.allowed_order_types_guest_checkout?.value?.includes(orderTypeList[orderState?.options?.type - 1])
213
+
214
+ const vibrateApp = (impact?: string) => {
215
+ const options = {
216
+ enableVibrateFallback: true,
217
+ ignoreAndroidSystemSettings: false
218
+ };
219
+ ReactNativeHapticFeedback.trigger(impact || "impactLight", options);
220
+ }
191
221
 
192
222
  const isError = (id: number) => {
193
223
  let bgColor = theme.colors.white;
@@ -204,11 +234,12 @@ export const ProductOptionsUI = (props: any) => {
204
234
  };
205
235
 
206
236
  const handleSaveProduct = () => {
237
+ vibrateApp()
207
238
  if (!productCart.quantity) {
208
239
  showToast(ToastType.Error, t('VALIDATION_ERROR_REQUIRED', 'The quantity field is required').replace('_attribute_', t('PRODUCT_POTIONS_QUANTITY', 'Quantity')))
209
240
  return
210
241
  }
211
- const isErrors = Object.values(errors).length > 0;
242
+ const isErrors = Object.values(errors)?.length > 0;
212
243
  if (!isErrors) {
213
244
  handleSave && handleSave();
214
245
  return;
@@ -227,7 +258,7 @@ export const ProductOptionsUI = (props: any) => {
227
258
  };
228
259
 
229
260
  const handleChangeMainIndex = (index: number) => {
230
- if (index < 0 || index > gallery.length - 1) {
261
+ if (index < 0 || index > gallery?.length - 1) {
231
262
  setThumbsSwiper(0)
232
263
  return
233
264
  }
@@ -270,7 +301,7 @@ export const ProductOptionsUI = (props: any) => {
270
301
  }
271
302
 
272
303
  const scrollDown = (id: any) => {
273
- const isErrors = Object.values(errors).length > 0
304
+ const isErrors = Object.values(errors)?.length > 0
274
305
  if (!isErrors) {
275
306
  return
276
307
  }
@@ -284,6 +315,11 @@ export const ProductOptionsUI = (props: any) => {
284
315
  }
285
316
  }
286
317
 
318
+ const handleUpdateGuest = () => {
319
+ const guestToken = uuid.v4()
320
+ if (guestToken) handleCreateGuestUser({ guest_token: guestToken })
321
+ }
322
+
287
323
  const handleOnLayout = (event: any, optionId: any) => {
288
324
  const _optionLayout = { ...optionLayout }
289
325
  const optionKey = 'id:' + optionId
@@ -294,9 +330,9 @@ export const ProductOptionsUI = (props: any) => {
294
330
  const saveErrors =
295
331
  orderState.loading ||
296
332
  maxProductQuantity === 0 ||
297
- Object.keys(errors).length > 0;
333
+ Object.keys(errors)?.length > 0;
334
+
298
335
 
299
-
300
336
  const ExtraOptions = ({ eID, options }: any) => (
301
337
  <>
302
338
  {options.map(({ id, name, respect_to, suboptions }: any) => (
@@ -336,7 +372,7 @@ export const ProductOptionsUI = (props: any) => {
336
372
  );
337
373
 
338
374
  const handleScroll = ({ nativeEvent: { contentOffset, layoutMeasurement } }: any) => {
339
-
375
+ setShowTitle(contentOffset.y > 30)
340
376
  const _topOption = Object.keys(optionLayout).find(((option: any) => Math.abs(contentOffset?.y - layoutMeasurement?.height - optionLayout[option]?.y) < 20))
341
377
  if (_topOption) {
342
378
  const _topOptionId = Number(_topOption.replace('id:', ''))
@@ -357,15 +393,18 @@ export const ProductOptionsUI = (props: any) => {
357
393
  useEffect(() => {
358
394
  const imageList: any = []
359
395
  const videoList: any = []
360
- product?.images?.length > 0 ? imageList.push(product.images) : imageList.push(theme?.images?.dummies?.product)
361
- if (product?.gallery && product?.gallery.length > 0) {
396
+ imageList.push(product?.images?.length > 0
397
+ ? product.images
398
+ : theme?.images?.dummies?.product)
399
+
400
+ if (product?.gallery && product?.gallery?.length > 0) {
362
401
  for (const img of product?.gallery) {
363
402
  if (img?.file) {
364
403
  imageList.push(img?.file)
365
404
  }
366
405
  if (img?.video) {
367
406
  const keys = img?.video.split('/')
368
- let _videoId = keys[keys.length - 1]
407
+ let _videoId = keys[keys?.length - 1]
369
408
 
370
409
  if (_videoId.includes('watch')) {
371
410
  const __url = _videoId.split('=')[1]
@@ -380,7 +419,7 @@ export const ProductOptionsUI = (props: any) => {
380
419
  } else if (_videoId.search(/\?/i) >= 0) {
381
420
  _videoId = _videoId.split('?')[0]
382
421
  }
383
- if ((_videoId.length === 11)) {
422
+ if ((_videoId?.length === 11)) {
384
423
  videoList.push(_videoId)
385
424
  }
386
425
  }
@@ -459,9 +498,22 @@ export const ProductOptionsUI = (props: any) => {
459
498
  height: 44,
460
499
  borderColor: theme.colors.primary,
461
500
  backgroundColor: theme.colors.white,
501
+ paddingLeft: 0,
502
+ paddingRight: 0
462
503
  }}
463
504
  />
464
505
  )}
506
+ {!auth && guestCheckoutEnabled && orderTypeEnabled && (
507
+ <TouchableOpacity style={{ marginTop: 10 }} onPress={handleUpdateGuest}>
508
+ {actionStatus?.loading ? (
509
+ <Placeholder Animation={Fade}>
510
+ <PlaceholderLine width={60} height={20} />
511
+ </Placeholder>
512
+ ) : (
513
+ <OText color={theme.colors.primary} size={13}>{t('WITH_GUEST_USER', 'With Guest user')}</OText>
514
+ )}
515
+ </TouchableOpacity>
516
+ )}
465
517
  </View>
466
518
  )
467
519
  }
@@ -475,14 +527,34 @@ export const ProductOptionsUI = (props: any) => {
475
527
  }
476
528
  }, [])
477
529
 
530
+ useEffect(() => {
531
+ if (!product?.id || product?.id === viewedProduct?.id) return
532
+ setViewedProduct(product)
533
+ events.emit('product_viewed', product)
534
+ }, [product?.id, viewedProduct])
478
535
 
479
536
  return (
480
537
  <SafeAreaView style={{ flex: 1 }}>
481
- <TopHeader>
482
- <TopActions onPress={() => handleGoBack()}>
483
- <IconAntDesign name='arrowleft' size={26} />
484
- </TopActions>
485
- </TopHeader>
538
+ <View style={styles.wrapperNavbar}>
539
+ <TopHeader>
540
+ <>
541
+ <TopActions onPress={() => handleGoBack()}>
542
+ <OIcon src={theme.images.general.arrow_left} color={theme.colors.textNormal} />
543
+ </TopActions>
544
+ {showTitle && (
545
+ <OText
546
+ size={16}
547
+ style={{ flex: 1, textAlign: 'center' }}
548
+ weight={Platform.OS === 'ios' ? '600' : 'bold'}
549
+ numberOfLines={2}
550
+ ellipsizeMode='tail'
551
+ >
552
+ {product?.name}
553
+ </OText>
554
+ )}
555
+ </>
556
+ </TopHeader>
557
+ </View>
486
558
  {!error && (
487
559
  <ScrollView
488
560
  ref={scrollViewRef}
@@ -531,14 +603,14 @@ export const ProductOptionsUI = (props: any) => {
531
603
  </View>
532
604
  }
533
605
  >
534
- {gallery && gallery.length > 0 && gallery.map((img, i) => (
606
+ {gallery && gallery?.length > 0 && gallery.map((img, i) => (
535
607
  <View
536
608
  style={styles.slide1}
537
609
  key={i}
538
610
  >
539
- {String(img).includes('image') || typeof img === 'number' ? (
611
+ {(String(img).includes('http') || typeof img === 'number') ? (
540
612
  <FastImage
541
- style={{ height: '100%', opacity: isSoldOut ? 0.5 : 1, aspectRatio: 3 / 2 }}
613
+ style={{ height: '100%', opacity: isSoldOut ? 0.5 : 1, aspectRatio: 16 / 9 }}
542
614
  source={typeof img !== 'number' ? {
543
615
  uri: optimizeImage(img, 'h_1024,c_limit'),
544
616
  priority: FastImage.priority.normal,
@@ -547,7 +619,8 @@ export const ProductOptionsUI = (props: any) => {
547
619
  ) : (
548
620
  <>
549
621
  <YoutubePlayer
550
- height={300}
622
+ height={'100%'}
623
+ width={'100%'}
551
624
  play={playing}
552
625
  videoId={img}
553
626
  onChangeState={onStateChange}
@@ -565,7 +638,7 @@ export const ProductOptionsUI = (props: any) => {
565
638
  paddingVertical: 15
566
639
  }}
567
640
  >
568
- {gallery.length > 0 && gallery.map((img, index) => (
641
+ {gallery?.length > 1 && gallery.map((img, index) => (
569
642
  <TouchableOpacity
570
643
  key={index}
571
644
  onPress={() => handleClickThumb(index)}
@@ -578,7 +651,7 @@ export const ProductOptionsUI = (props: any) => {
578
651
  opacity: index === thumbsSwiper ? 1 : 0.8
579
652
  }}
580
653
  >
581
- {String(img).includes('image') ? (
654
+ {String(img).includes('http') ? (
582
655
  <OIcon
583
656
  url={img}
584
657
  style={{
@@ -593,7 +666,7 @@ export const ProductOptionsUI = (props: any) => {
593
666
  />
594
667
  ) : (
595
668
  <OIcon
596
- url={'http://img.youtube.com/vi/' + img + '/0.jpg'}
669
+ url={'https://img.youtube.com/vi/' + img + '/0.jpg'}
597
670
  style={{
598
671
  borderColor: theme.colors.lightGray,
599
672
  borderRadius: 8,
@@ -613,7 +686,10 @@ export const ProductOptionsUI = (props: any) => {
613
686
  </>
614
687
  )}
615
688
  </WrapHeader>
616
- <ProductSummary onLayout={(event: any) => setSummaryRefHeight(event.nativeEvent.layout?.height)}>
689
+ <ProductSummary
690
+ ph={isChewLayout ? 20 : 40}
691
+ onLayout={(event: any) => setSummaryRefHeight(event.nativeEvent.layout?.height)}
692
+ >
617
693
  <ProductTitle>
618
694
  {loading && !product ? (
619
695
  <Placeholder Animation={Fade}>
@@ -713,11 +789,11 @@ export const ProductOptionsUI = (props: any) => {
713
789
  marginBottom: 20,
714
790
  borderBottomWidth: 1,
715
791
  borderBottomColor: theme.colors.border,
716
- marginHorizontal: 30,
792
+ marginHorizontal: isChewLayout ? 20 : 30,
717
793
  backgroundColor: theme.colors.backgroundPage,
718
794
  }}
719
795
  >
720
- {product?.ingredients.length > 0 && (
796
+ {product?.ingredients?.length > 0 && (
721
797
  <TouchableOpacity
722
798
  key={`eopt_key_01`}
723
799
  onPress={() => {
@@ -742,7 +818,7 @@ export const ProductOptionsUI = (props: any) => {
742
818
  </OText>
743
819
  </TouchableOpacity>
744
820
  )}
745
- {product?.extras.map((extra: any) =>
821
+ {product?.extras?.map((extra: any) =>
746
822
  <ExtraOptions key={extra.id} options={extra.options} />
747
823
  )}
748
824
  </ExtraOptionWrap>
@@ -787,12 +863,13 @@ export const ProductOptionsUI = (props: any) => {
787
863
  </>
788
864
  ) : (
789
865
  <ProductEditions
866
+ style={{ paddingHorizontal: isChewLayout ? 20 : 40 }}
790
867
  onLayout={(event: any) => {
791
868
  setEditionsLayoutY(event.nativeEvent.layout?.y)
792
869
  }}
793
870
  >
794
871
  <>
795
- {product?.ingredients.length > 0 && (
872
+ {product?.ingredients?.length > 0 && (
796
873
  <View style={styles.optionContainer} onLayout={(event: any) => handleOnLayout(event, 0)}>
797
874
  <SectionTitle>
798
875
  <OText size={16}>
@@ -814,8 +891,8 @@ export const ProductOptionsUI = (props: any) => {
814
891
  </WrapperIngredients>
815
892
  </View>
816
893
  )}
817
- {product?.extras.sort((a: any, b: any) => a.rank - b.rank).map((extra: any) =>
818
- extra.options.sort((a: any, b: any) => a.rank - b.rank).map((option: any) => {
894
+ {product?.extras?.sort((a: any, b: any) => a.rank - b.rank).map((extra: any) =>
895
+ extra.options?.sort((a: any, b: any) => a.rank - b.rank).map((option: any) => {
819
896
  const currentState =
820
897
  productCart.options[`id:${option.id}`] || {};
821
898
  return (
@@ -831,7 +908,7 @@ export const ProductOptionsUI = (props: any) => {
831
908
  backgroundColor: isError(option.id),
832
909
  borderRadius: 7.6
833
910
  }}>
834
- {option.suboptions.sort((a: any, b: any) => a.rank - b.rank).map(
911
+ {option?.suboptions?.sort((a: any, b: any) => a.rank - b.rank).map(
835
912
  (suboption: any) => {
836
913
  const currentState =
837
914
  productCart.options[
@@ -896,7 +973,7 @@ export const ProductOptionsUI = (props: any) => {
896
973
  )}
897
974
  </ProductEditions>
898
975
  )}
899
- {!!error && error.length > 0 && (
976
+ {!!error && error?.length > 0 && (
900
977
  <NotFoundSource content={error[0]?.message || error[0]} />
901
978
  )}
902
979
  </ScrollView>
@@ -919,7 +996,7 @@ export const ProductOptionsUI = (props: any) => {
919
996
  disabled={productCart.quantity === 1 || !productCart.quantity || isSoldOut || ((productCart?.quantity + productAddedToCartLength) <= product?.minimum_per_order)}>
920
997
  <OIcon
921
998
  src={theme.images.general.minus}
922
- width={16}
999
+ width={20}
923
1000
  color={
924
1001
  productCart.quantity === 1 || isSoldOut
925
1002
  ? theme.colors.backgroundGray
@@ -940,7 +1017,8 @@ export const ProductOptionsUI = (props: any) => {
940
1017
  borderRadius: 8,
941
1018
  borderColor: theme.colors.inputBorderColor,
942
1019
  height: 44,
943
- marginHorizontal: 10
1020
+ marginHorizontal: 10,
1021
+ fontSize: 16
944
1022
  }}
945
1023
  />
946
1024
  )}
@@ -963,7 +1041,7 @@ export const ProductOptionsUI = (props: any) => {
963
1041
  }>
964
1042
  <OIcon
965
1043
  src={theme.images.general.plus}
966
- width={16}
1044
+ width={20}
967
1045
  color={
968
1046
  maxProductQuantity <= 0 ||
969
1047
  (productCart?.quantity + productAddedToCartLength) >= maxProductQuantity ||
@@ -8,8 +8,8 @@ export const WrapHeader = styled.View`
8
8
  export const TopActions = styled.TouchableOpacity`
9
9
  height: 60px;
10
10
  justify-content: center;
11
- padding-horizontal: 30px;
12
- width: 100px;
11
+ min-width: 30px;
12
+ padding-right: 15px;
13
13
  `;
14
14
 
15
15
  export const TopHeader = styled.View`
@@ -44,12 +44,10 @@ export const ProductTitle = styled.View`
44
44
  padding-bottom: 7px;
45
45
  `
46
46
 
47
- export const ProductDescription = styled.View`
48
- margin-bottom: 20px;
49
- `
47
+ export const ProductDescription = styled.View``
50
48
 
51
49
  export const ProductEditions = styled.View`
52
- padding: 0 40px;
50
+ padding-vertical: 0;
53
51
  `
54
52
 
55
53
  export const SectionTitle = styled.View`
@@ -96,7 +94,7 @@ export const WeightUnitItem = styled.View`
96
94
  `}
97
95
  `
98
96
  export const ProductSummary = styled.View`
99
- padding: 26px 40px;
97
+ padding: 26px ${(props: any) => props.ph}px 0;
100
98
  position: relative;
101
99
  background-color: white;
102
100
  z-index: 100;
@@ -27,6 +27,7 @@ import { ProductItemAccordionParams } from '../../types'
27
27
  export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
28
28
 
29
29
  const {
30
+ isDisabledEdit,
30
31
  isCartPending,
31
32
  isCartProduct,
32
33
  product,
@@ -76,6 +77,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
76
77
  const [isServiceOpen, setIsServiceOpen] = useState(false)
77
78
  // const [setHeight, setHeightState] = useState({ height: new Animated.Value(0) })
78
79
  // const [setRotate, setRotateState] = useState({ angle: new Animated.Value(0) })
80
+ const [productQuantity, setProductQuantity] = useState(product.quantity.toString())
79
81
 
80
82
  const productInfo = () => {
81
83
  if (isCartProduct) {
@@ -106,19 +108,20 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
106
108
  /* const toggleAccordion = () => {
107
109
  if ((!product?.valid_menu && isCartProduct)) return
108
110
  if (isActive) {
109
- Animated.timing(setHeight.height, {
111
+ Animated.timing(setHeight.height, {
110
112
  toValue: 100,
111
113
  duration: 500,
112
114
  easing: Easing.linear,
113
115
  useNativeDriver: false,
114
- }).start()
116
+ }).start()
115
117
  } else {
116
- setHeightState({height: new Animated.Value(0)})
118
+ setHeightState({height: new Animated.Value(0)})
117
119
  }
118
120
  }*/
119
121
 
120
122
  const handleChangeQuantity = (value: string) => {
121
123
  if (!orderState.loading) {
124
+ setProductQuantity(value)
122
125
  if (parseInt(value) === 0) {
123
126
  onDeleteProduct && onDeleteProduct(product)
124
127
  } else {
@@ -133,7 +136,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
133
136
  }
134
137
 
135
138
  /*useEffect(() => {
136
- toggleAccordion()
139
+ toggleAccordion()
137
140
  }, [isActive])*/
138
141
 
139
142
  const productOptions = getProductMax && [...Array(getProductMax(product) + 1),].map((_: any, opt: number) => {
@@ -203,12 +206,12 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
203
206
  </View>
204
207
  ) : (
205
208
  <>
206
- {isCartProduct && !isCartPending && getProductMax && (
209
+ {!isDisabledEdit && isCartProduct && !isCartPending && getProductMax && (
207
210
  <ProductInfo>
208
211
  <RNPickerSelect
209
212
  items={productOptions}
210
213
  onValueChange={handleChangeQuantity}
211
- value={product.quantity.toString()}
214
+ value={productQuantity}
212
215
  style={pickerStyle}
213
216
  useNativeAndroidPickerStyle={false}
214
217
  placeholder={{}}
@@ -225,23 +228,23 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
225
228
  </ProductQuantity>
226
229
  )}
227
230
  <View style={{ flex: 1 }}>
228
- <OText size={12} lineHeight={18} weight={'400'}>{product.name}</OText>
231
+ <OText size={12} lineHeight={18} weight={'400'} mLeft={8}>{product.name}</OText>
229
232
  </View>
230
233
  </>
231
234
  )}
232
235
  <View style={{ display: 'flex', flexDirection: 'column', flex: 1, alignItems: 'flex-end', maxWidth: 100 }}>
233
236
  <View style={{ flexDirection: 'row' }}>
234
237
  <OText size={12} lineHeight={18} weight={'400'}>{parsePrice(product.total || product.price)}</OText>
235
- {(productInfo().ingredients.length > 0 || productInfo().options.length > 0 || product.comment) && (
238
+ {(productInfo().ingredients.length > 0 || productInfo().options.length > 0 || !!product.comment) && (
236
239
  <MaterialCommunityIcon name='chevron-down' size={18} />
237
240
  )}
238
241
  </View>
239
- <View style={{ display: 'flex', flexDirection: 'row', justifyContent: 'flex-start' }}>
240
- {onEditProduct && isCartProduct && !isCartPending && product?.valid_menu && (
241
- <TouchableOpacity onPress={() => handleEditProduct(product)} style={{ marginEnd: 7 }}>
242
- <OIcon
243
- src={theme.images.general.pencil}
244
- width={16}
242
+ <View style={{ display: 'flex', flexDirection: 'row', justifyContent: 'flex-start', height: 20 }}>
243
+ {!isDisabledEdit && onEditProduct && isCartProduct && !isCartPending && product?.valid_menu && (
244
+ <TouchableOpacity onPress={() => handleEditProduct(product)} style={{ marginRight: 5 }}>
245
+ <MaterialCommunityIcon
246
+ name='pencil-outline'
247
+ size={20}
245
248
  color={theme.colors.textSecondary}
246
249
  />
247
250
  </TouchableOpacity>
@@ -252,9 +255,9 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
252
255
  message={t('QUESTION_DELETE_PRODUCT', 'Are you sure that you want to delete the product?')}
253
256
  onAccept={() => onDeleteProduct(product)}
254
257
  >
255
- <OIcon
256
- src={theme.images.general.trash}
257
- width={17}
258
+ <MaterialCommunityIcon
259
+ name='trash-can-outline'
260
+ size={20}
258
261
  color={theme.colors.textSecondary}
259
262
  />
260
263
  </OAlert>
@@ -286,7 +289,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
286
289
  )}
287
290
  {productInfo().options.length > 0 && (
288
291
  <ProductOptionsList>
289
- {productInfo().options.map((option: any, i: number) => (
292
+ {productInfo().options.sort((a: any, b: any) => a.rank - b.rank).map((option: any, i: number) => (
290
293
  <ProductOption key={option.id + i}>
291
294
  <OText size={10} color={theme.colors.textSecondary}>{option.name}</OText>
292
295
  {option.suboptions.map((suboption: any) => (
@@ -305,7 +308,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
305
308
  ))}
306
309
  </ProductOptionsList>
307
310
  )}
308
- {product.comment && (
311
+ {!!product.comment && (
309
312
  <ProductComment>
310
313
  <OText size={10} color={theme.colors.textSecondary}>{t('SPECIAL_COMMENT', 'Special Comment')}</OText>
311
314
  <OText size={10} color={theme.colors.textThird}>{product.comment}</OText>
@@ -6,6 +6,7 @@ import {
6
6
  } from 'ordering-components/native'
7
7
  import { useTheme } from 'styled-components/native';
8
8
  import { StyleSheet, View } from 'react-native'
9
+ import IconAntDesign from 'react-native-vector-icons/AntDesign';
9
10
 
10
11
  import {
11
12
  Container,
@@ -31,15 +32,17 @@ export const ProductOptionSubOptionUI = (props: any) => {
31
32
  setIsScrollAvailable
32
33
  } = props
33
34
 
34
- const disableIncrement = option?.limit_suboptions_by_max ? balance === option?.max : state.quantity === suboption?.max || (!state.selected && balance === option?.max)
35
+ const disableIncrement = option?.limit_suboptions_by_max ? balance === option?.max || state.quantity === suboption?.max : state.quantity === suboption?.max || (!state.selected && balance === option?.max)
35
36
  const price = option?.with_half_option && suboption?.half_price && state.position !== 'whole' ? suboption?.half_price : suboption?.price
36
-
37
+
37
38
  const theme = useTheme();
38
39
  const [, t] = useLanguage()
39
40
  const [{ parsePrice }] = useUtils()
40
41
  const [showMessage, setShowMessage] = useState(false)
41
42
  const [isDirty, setIsDirty] = useState(false)
42
43
 
44
+ const iconsSize = 20
45
+
43
46
  const handleSuboptionClick = () => {
44
47
  toggleSelect()
45
48
  setIsDirty(true)
@@ -64,7 +67,7 @@ export const ProductOptionSubOptionUI = (props: any) => {
64
67
 
65
68
  return (
66
69
  <View>
67
- <Container onPress={() => handleSuboptionClick()}>
70
+ <Container onPress={!(option?.with_half_option || option?.allow_suboption_quantity) ? () => handleSuboptionClick() : null}>
68
71
  <IconControl disabled={disabled} onPress={() => handleSuboptionClick()}>
69
72
  {((option?.min === 0 && option?.max === 1) || option?.max > 1) ? (
70
73
  state?.selected ? (
@@ -87,9 +90,9 @@ export const ProductOptionSubOptionUI = (props: any) => {
87
90
  {option?.allow_suboption_quantity && state?.selected && (
88
91
  <>
89
92
  <Checkbox disabled={disabled || state.quantity === 0} onPress={decrement}>
90
- <OIcon
91
- src={theme.images.general.minus}
92
- width={16}
93
+ <IconAntDesign
94
+ name='minuscircleo'
95
+ size={iconsSize}
93
96
  color={state.quantity === 0 || disabled ? theme.colors.disabled : theme.colors.primary}
94
97
  />
95
98
  </Checkbox>
@@ -97,9 +100,9 @@ export const ProductOptionSubOptionUI = (props: any) => {
97
100
  {state.quantity}
98
101
  </OText>
99
102
  <Checkbox disabled={disabled || disableIncrement} onPress={increment}>
100
- <OIcon
101
- src={theme.images.general.plus}
102
- width={16}
103
+ <IconAntDesign
104
+ name='pluscircleo'
105
+ size={iconsSize}
103
106
  color={disableIncrement || disabled ? theme.colors.disabled : theme.colors.primary}
104
107
  />
105
108
  </Checkbox>
@@ -113,7 +116,8 @@ export const ProductOptionSubOptionUI = (props: any) => {
113
116
  <OIcon
114
117
  src={theme.images.general.half_l}
115
118
  color={state.selected && state.position === 'left' ? theme.colors.primary : '#cbcbcb'}
116
- width={16}
119
+ width={20}
120
+ height={20}
117
121
  style={styles.inverse}
118
122
  />
119
123
  </Circle>
@@ -121,26 +125,32 @@ export const ProductOptionSubOptionUI = (props: any) => {
121
125
  <OIcon
122
126
  src={theme.images.general.half_f}
123
127
  color={state.selected && state.position === 'whole' ? theme.colors.primary : '#cbcbcb'}
124
- width={16}
128
+ width={20}
129
+ height={20}
125
130
  />
126
131
  </Circle>
127
132
  <Circle disabled={disabled} onPress={() => changePosition('right')}>
128
133
  <OIcon
129
134
  src={theme.images.general.half_r}
130
135
  color={state.selected && state.position === 'right' ? theme.colors.primary : '#cbcbcb'}
131
- width={16}
136
+ width={20}
137
+ height={20}
132
138
  />
133
139
  </Circle>
134
140
  </>
135
141
  )}
136
142
  </PositionControl>
137
143
  {price > 0 && (
138
- <OText size={12} lineHeight={18} color={theme.colors.textSecondary}>
144
+ <OText size={12} lineHeight={18} color={theme.colors.textSecondary} style={{ paddingRight: 10 }}>
139
145
  + {parsePrice(price)}
140
146
  </OText>
141
147
  )}
142
148
  </Container>
143
- {showMessage && <OText size={10} mLeft={4} mRight={4} style={{ flex: 1, textAlign: 'center' }} color={theme.colors.primary}>{`${t('OPTIONS_MAX_LIMIT', 'Maximum options to choose')}: ${option?.max}`}</OText>}
149
+ {showMessage && (
150
+ <OText size={10} mLeft={4} mRight={4} style={{ flex: 1, textAlign: 'center' }} color={theme.colors.primary}>
151
+ {`${t('OPTIONS_MAX_LIMIT', 'Maximum options to choose')}: ${option?.max}`}
152
+ </OText>
153
+ )}
144
154
  </View>
145
155
  )
146
156
  }