ordering-ui-react-native 0.21.64 → 0.21.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 (162) hide show
  1. package/package.json +6 -7
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessesListing/index.tsx +1 -1
  4. package/src/components/PaymentOptionsWebView/index.tsx +1 -0
  5. package/src/components/StripeMethodForm/index.tsx +6 -4
  6. package/src/components/VerifyPhone/styles.tsx +1 -2
  7. package/src/types/index.tsx +3 -1
  8. package/themes/business/index.tsx +4 -0
  9. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +9 -6
  10. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
  11. package/themes/business/src/components/Chat/index.tsx +3 -1
  12. package/themes/business/src/components/DriverMap/index.tsx +36 -23
  13. package/themes/business/src/components/GoogleMap/index.tsx +15 -8
  14. package/themes/business/src/components/Home/index.tsx +5 -1
  15. package/themes/business/src/components/LanguageSelector/index.tsx +1 -2
  16. package/themes/business/src/components/LanguageSelector/lang_country.json +515 -70
  17. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  18. package/themes/business/src/components/MapView/index.tsx +30 -15
  19. package/themes/business/src/components/NewOrderNotification/index.tsx +76 -26
  20. package/themes/business/src/components/OrderDetails/Business.tsx +63 -7
  21. package/themes/business/src/components/OrderDetails/Delivery.tsx +36 -21
  22. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +122 -56
  23. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +61 -35
  24. package/themes/business/src/components/OrderDetails/styles.tsx +39 -3
  25. package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +220 -0
  26. package/themes/business/src/components/OrderSummary/index.tsx +240 -76
  27. package/themes/business/src/components/OrdersListManager/index.tsx +9 -1
  28. package/themes/business/src/components/OrdersOption/index.tsx +249 -126
  29. package/themes/business/src/components/PhoneInputNumber/index.tsx +8 -5
  30. package/themes/business/src/components/PreviousMessages/index.tsx +12 -0
  31. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +29 -19
  32. package/themes/business/src/components/PreviousOrders/index.tsx +5 -3
  33. package/themes/business/src/components/PrinterEdition/index.tsx +363 -0
  34. package/themes/business/src/components/PrinterEdition/styles.tsx +61 -0
  35. package/themes/business/src/components/PrinterSettings/index.tsx +267 -0
  36. package/themes/business/src/components/PrinterSettings/styles.tsx +30 -0
  37. package/themes/business/src/components/ProductItemAccordion/index.tsx +2 -2
  38. package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
  39. package/themes/business/src/components/Sessions/index.tsx +187 -0
  40. package/themes/business/src/components/Sessions/styles.tsx +20 -0
  41. package/themes/business/src/components/StoresList/index.tsx +2 -2
  42. package/themes/business/src/components/UserFormDetails/index.tsx +111 -107
  43. package/themes/business/src/components/UserProfileForm/index.tsx +106 -54
  44. package/themes/business/src/components/WebsocketStatus/index.tsx +2 -2
  45. package/themes/business/src/components/shared/OInput.tsx +2 -0
  46. package/themes/business/src/components/shared/OTextarea.tsx +8 -9
  47. package/themes/business/src/hooks/useLocation.tsx +5 -4
  48. package/themes/business/src/types/index.tsx +23 -5
  49. package/themes/business/src/utils/index.tsx +19 -1
  50. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  51. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  52. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  53. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  54. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  55. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  56. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  57. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  58. package/themes/original/index.tsx +13 -1
  59. package/themes/original/src/components/AddressDetails/index.tsx +20 -10
  60. package/themes/original/src/components/AddressForm/index.tsx +32 -17
  61. package/themes/original/src/components/AddressList/index.tsx +8 -7
  62. package/themes/original/src/components/AnalyticsSegment/index.tsx +6 -6
  63. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  64. package/themes/original/src/components/BusinessBasicInformation/index.tsx +6 -9
  65. package/themes/original/src/components/BusinessController/index.tsx +12 -7
  66. package/themes/original/src/components/BusinessItemAccordion/index.tsx +15 -7
  67. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +2 -3
  68. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +1 -3
  69. package/themes/original/src/components/BusinessListingSearch/index.tsx +1 -2
  70. package/themes/original/src/components/BusinessPreorder/index.tsx +20 -15
  71. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +5 -5
  72. package/themes/original/src/components/BusinessProductsList/index.tsx +3 -3
  73. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  74. package/themes/original/src/components/BusinessProductsListing/index.tsx +28 -13
  75. package/themes/original/src/components/BusinessTypeFilter/index.tsx +9 -8
  76. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  77. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +1 -1
  78. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
  79. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  80. package/themes/original/src/components/Cart/index.tsx +17 -8
  81. package/themes/original/src/components/CartContent/index.tsx +60 -45
  82. package/themes/original/src/components/Checkout/index.tsx +94 -62
  83. package/themes/original/src/components/CitiesControl/index.tsx +0 -3
  84. package/themes/original/src/components/CouponControl/index.tsx +1 -3
  85. package/themes/original/src/components/DriverTips/index.tsx +1 -3
  86. package/themes/original/src/components/Favorite/index.tsx +1 -5
  87. package/themes/original/src/components/FavoriteList/index.tsx +0 -1
  88. package/themes/original/src/components/ForgotPasswordForm/index.tsx +5 -7
  89. package/themes/original/src/components/GiftCard/GiftCardOrdersList/index.tsx +64 -0
  90. package/themes/original/src/components/GiftCard/GiftCardOrdersList/styles.tsx +8 -0
  91. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +15 -17
  92. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +3 -7
  93. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +24 -32
  94. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +9 -11
  95. package/themes/original/src/components/GiftCard/SingleGiftCard/index.tsx +101 -0
  96. package/themes/original/src/components/GiftCard/SingleGiftCard/styles.tsx +4 -0
  97. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +82 -0
  98. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/styles.tsx +9 -0
  99. package/themes/original/src/components/GoogleMap/index.tsx +39 -18
  100. package/themes/original/src/components/Help/index.tsx +2 -0
  101. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
  102. package/themes/original/src/components/Home/index.tsx +2 -10
  103. package/themes/original/src/components/LoginForm/Otp/index.tsx +0 -3
  104. package/themes/original/src/components/LoginForm/index.tsx +4 -7
  105. package/themes/original/src/components/MessageListing/index.tsx +1 -0
  106. package/themes/original/src/components/Messages/index.tsx +8 -7
  107. package/themes/original/src/components/MomentOption/index.tsx +13 -2
  108. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +7 -3
  109. package/themes/original/src/components/MultiCheckout/index.tsx +123 -62
  110. package/themes/original/src/components/MultiCheckout/styles.tsx +17 -0
  111. package/themes/original/src/components/MultiOrdersDetails/index.tsx +20 -14
  112. package/themes/original/src/components/MyOrders/index.tsx +21 -26
  113. package/themes/original/src/components/NavBar/index.tsx +4 -2
  114. package/themes/original/src/components/NetworkError/index.tsx +0 -5
  115. package/themes/original/src/components/NotFoundSource/index.tsx +0 -3
  116. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +5 -7
  117. package/themes/original/src/components/OrderDetails/index.tsx +5 -7
  118. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  119. package/themes/original/src/components/OrderProgress/index.tsx +22 -3
  120. package/themes/original/src/components/OrderTypeSelector/index.tsx +7 -6
  121. package/themes/original/src/components/OrdersOption/index.tsx +2 -4
  122. package/themes/original/src/components/PaymentOptionCard/index.tsx +4 -2
  123. package/themes/original/src/components/PaymentOptionStripe/index.tsx +0 -5
  124. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  125. package/themes/original/src/components/PaymentOptions/index.tsx +47 -6
  126. package/themes/original/src/components/PlaceSpot/index.tsx +1 -3
  127. package/themes/original/src/components/PreviousOrders/index.tsx +1 -2
  128. package/themes/original/src/components/ProductForm/ActionButton.tsx +16 -19
  129. package/themes/original/src/components/ProductForm/index.tsx +120 -109
  130. package/themes/original/src/components/ProductItemAccordion/index.tsx +55 -49
  131. package/themes/original/src/components/ProductItemAccordion/styles.tsx +3 -4
  132. package/themes/original/src/components/ProductOptionSubOption/index.tsx +112 -91
  133. package/themes/original/src/components/ProfessionalProfile/index.tsx +4 -5
  134. package/themes/original/src/components/Promotions/index.tsx +6 -9
  135. package/themes/original/src/components/ReviewDriver/index.tsx +1 -1
  136. package/themes/original/src/components/ReviewOrder/index.tsx +2 -2
  137. package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
  138. package/themes/original/src/components/ReviewTrigger/index.tsx +2 -2
  139. package/themes/original/src/components/ServiceForm/index.tsx +52 -54
  140. package/themes/original/src/components/Sessions/index.tsx +3 -3
  141. package/themes/original/src/components/SignupForm/index.tsx +65 -67
  142. package/themes/original/src/components/SingleOrderCard/index.tsx +1 -2
  143. package/themes/original/src/components/SingleProductCard/index.tsx +5 -6
  144. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  145. package/themes/original/src/components/StripeCardForm/index.tsx +0 -3
  146. package/themes/original/src/components/StripeCardsList/index.tsx +12 -36
  147. package/themes/original/src/components/StripeElementsForm/index.tsx +78 -59
  148. package/themes/original/src/components/StripeElementsForm/naked.tsx +48 -1
  149. package/themes/original/src/components/StripeRedirectForm/index.tsx +0 -3
  150. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +10 -7
  151. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +8 -3
  152. package/themes/original/src/components/UserFormDetails/index.tsx +83 -84
  153. package/themes/original/src/components/UserProfile/index.tsx +11 -2
  154. package/themes/original/src/components/Wallets/index.tsx +7 -4
  155. package/themes/original/src/components/WebsocketStatus/index.tsx +169 -0
  156. package/themes/original/src/components/WebsocketStatus/styles.tsx +28 -0
  157. package/themes/original/src/components/shared/OAlert.tsx +2 -1
  158. package/themes/original/src/components/shared/OButton.tsx +8 -7
  159. package/themes/original/src/components/shared/OInput.tsx +1 -4
  160. package/themes/original/src/types/index.tsx +5 -1
  161. package/themes/original/src/utils/index.tsx +12 -1
  162. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -58,9 +58,9 @@ import NavBar from '../NavBar';
58
58
  import { orderTypeList } from '../../utils';
59
59
  import { ActionButton } from './ActionButton'
60
60
  import { ExtraOptions } from './ExtraOptions'
61
- const windowWidth = Dimensions.get('window').width;
62
-
61
+ import { IOScrollView } from 'react-native-intersection-observer';
63
62
 
63
+ const windowWidth = Dimensions.get('window').width;
64
64
 
65
65
  export const ProductOptionsUI = (props: any) => {
66
66
  const {
@@ -88,6 +88,7 @@ export const ProductOptionsUI = (props: any) => {
88
88
  const [events] = useEvent()
89
89
  const commentRef = useRef()
90
90
  const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
91
+ const hideProductDummyLogo = theme?.business_view?.components?.products?.components?.product?.components?.dummy?.hidden
91
92
 
92
93
  const styles = StyleSheet.create({
93
94
  mainContainer: {
@@ -286,14 +287,14 @@ export const ProductOptionsUI = (props: any) => {
286
287
  setQtyBy({ [val]: true, [!val]: false })
287
288
  }
288
289
 
289
- const onStateChange = useCallback((state) => {
290
+ const onStateChange = useCallback((state : string) => {
290
291
  if (state === "ended") {
291
292
  setPlaying(false);
292
293
  }
293
294
  }, []);
294
295
 
295
296
  const togglePlaying = useCallback(() => {
296
- setPlaying((prev) => !prev);
297
+ setPlaying((prev : any) => !prev);
297
298
  }, []);
298
299
 
299
300
  const onChangeProductCartQuantity = (quantity: number) => {
@@ -327,6 +328,9 @@ export const ProductOptionsUI = (props: any) => {
327
328
  let _optionLayout: any = {}
328
329
 
329
330
  const handleOnLayout = (event: any, optionId: any, lastMounts: boolean) => {
331
+ if (suboptionsLength >= 200) {
332
+ return
333
+ }
330
334
  _optionLayout = { ..._optionLayout }
331
335
  const optionKey = 'id:' + optionId
332
336
  _optionLayout[optionKey] = { y: event.nativeEvent.layout?.y }
@@ -436,6 +440,8 @@ export const ProductOptionsUI = (props: any) => {
436
440
  selOpt
437
441
  }
438
442
 
443
+ const suboptionsLength = product?.extras?.reduce((acc : number, extras : any) => acc + extras?.options?.reduce((accSuboptions : number, options: any) => accSuboptions + options?.suboptions?.length, 0), 0)
444
+
439
445
  return (
440
446
  <SafeAreaView style={{ flex: 1 }}>
441
447
  <View style={styles.wrapperNavbar}>
@@ -462,7 +468,7 @@ export const ProductOptionsUI = (props: any) => {
462
468
  </TopHeader>
463
469
  </View>
464
470
  {!error && (
465
- <ScrollView
471
+ <IOScrollView
466
472
  ref={scrollViewRef}
467
473
  contentContainerStyle={{ paddingBottom: 80 }}
468
474
  stickyHeaderIndices={[2]}
@@ -482,114 +488,118 @@ export const ProductOptionsUI = (props: any) => {
482
488
  </View>
483
489
  ) : (
484
490
  <>
485
- <Swiper
486
- loop={false}
487
- ref={swiperRef}
488
- showsButtons={true}
489
- style={styles.mainSwiper}
490
- showsPagination={false}
491
- onIndexChanged={(index) => handleChangeMainIndex(index)}
492
- prevButton={
493
- <View style={styles.swiperButton}>
494
- <IconAntDesign
495
- name="caretleft"
496
- color={theme.colors.white}
497
- size={13}
498
- // style={styles.starIcon}
499
- />
500
- </View>
501
- }
502
- nextButton={
503
- <View style={styles.swiperButton}>
504
- <IconAntDesign
505
- name="caretright"
506
- color={theme.colors.white}
507
- size={13}
508
- // style={styles.starIcon}
509
- />
510
- </View>
511
- }
512
- >
513
- {gallery && gallery?.length > 0 && gallery.map((img, i) => (
514
- <View
515
- style={styles.slide1}
516
- key={i}
517
- >
518
- {(String(img).includes('http') || typeof img === 'number') ? (
519
- <FastImage
520
- style={{ height: '100%', opacity: isSoldOut ? 0.5 : 1, aspectRatio: 16 / 9 }}
521
- source={typeof img !== 'number' ? {
522
- uri: optimizeImage(img, 'h_1024,c_limit'),
523
- priority: FastImage.priority.normal,
524
- } : img}
525
- />
526
- ) : (
527
- <>
528
- <YoutubePlayer
529
- height={'100%'}
530
- width={'100%'}
531
- play={playing}
532
- videoId={img}
533
- onChangeState={onStateChange}
491
+ {(product?.images || !hideProductDummyLogo) && (
492
+ <>
493
+ <Swiper
494
+ loop={false}
495
+ ref={swiperRef}
496
+ showsButtons={true}
497
+ style={styles.mainSwiper}
498
+ showsPagination={false}
499
+ onIndexChanged={(index : any) => handleChangeMainIndex(index)}
500
+ prevButton={
501
+ <View style={styles.swiperButton}>
502
+ <IconAntDesign
503
+ name="caretleft"
504
+ color={theme.colors.white}
505
+ size={13}
506
+ // style={styles.starIcon}
534
507
  />
535
- <Button title={playing ? "pause" : "play"} onPress={togglePlaying} />
536
- </>
537
- )}
538
- </View>
539
- ))}
540
- </Swiper>
541
- <ScrollView
542
- horizontal
543
- contentContainerStyle={{
544
- paddingHorizontal: 20,
545
- paddingVertical: 15
546
- }}
547
- >
548
- {gallery?.length > 1 && gallery.map((img, index) => (
549
- <TouchableOpacity
550
- key={index}
551
- onPress={() => handleClickThumb(index)}
552
- >
553
- <View
554
- style={{
555
- height: 56,
556
- borderRadius: 8,
557
- margin: 8,
558
- opacity: index === thumbsSwiper ? 1 : 0.8
559
- }}
560
- >
561
- {String(img).includes('http') ? (
562
- <OIcon
563
- url={img}
564
- style={{
565
- borderColor: theme.colors.lightGray,
566
- borderRadius: 8,
567
- minHeight: '100%',
568
- opacity: isSoldOut ? 0.5 : 1
569
- }}
570
- width={56}
571
- height={56}
572
- cover
508
+ </View>
509
+ }
510
+ nextButton={
511
+ <View style={styles.swiperButton}>
512
+ <IconAntDesign
513
+ name="caretright"
514
+ color={theme.colors.white}
515
+ size={13}
516
+ // style={styles.starIcon}
573
517
  />
574
- ) : (
575
- <OIcon
576
- url={'https://img.youtube.com/vi/' + img + '/0.jpg'}
518
+ </View>
519
+ }
520
+ >
521
+ {gallery && gallery?.length > 0 && gallery.map((img : any, i: number) => (
522
+ <View
523
+ style={styles.slide1}
524
+ key={i}
525
+ >
526
+ {(String(img).includes('http') || typeof img === 'number') ? (
527
+ <FastImage
528
+ style={{ height: '100%', opacity: isSoldOut ? 0.5 : 1, aspectRatio: 16 / 9 }}
529
+ source={typeof img !== 'number' ? {
530
+ uri: optimizeImage(img, 'h_1024,c_limit'),
531
+ priority: FastImage.priority.normal,
532
+ } : img}
533
+ />
534
+ ) : (
535
+ <>
536
+ <YoutubePlayer
537
+ height={'100%'}
538
+ width={'100%'}
539
+ play={playing}
540
+ videoId={img}
541
+ onChangeState={onStateChange}
542
+ />
543
+ <Button title={playing ? "pause" : "play"} onPress={togglePlaying} />
544
+ </>
545
+ )}
546
+ </View>
547
+ ))}
548
+ </Swiper>
549
+ <ScrollView
550
+ horizontal
551
+ contentContainerStyle={{
552
+ paddingHorizontal: 20,
553
+ paddingVertical: 15
554
+ }}
555
+ >
556
+ {gallery?.length > 1 && gallery.map((img: any, index: number) => (
557
+ <TouchableOpacity
558
+ key={index}
559
+ onPress={() => handleClickThumb(index)}
560
+ >
561
+ <View
577
562
  style={{
578
- borderColor: theme.colors.lightGray,
563
+ height: 56,
579
564
  borderRadius: 8,
580
- minHeight: '100%',
581
- opacity: isSoldOut ? 0.5 : 1
565
+ margin: 8,
566
+ opacity: index === thumbsSwiper ? 1 : 0.8
582
567
  }}
583
- width={56}
584
- height={56}
585
- cover
586
- />
587
- )}
588
- </View>
589
- </TouchableOpacity>
568
+ >
569
+ {String(img).includes('http') ? (
570
+ <OIcon
571
+ url={img}
572
+ style={{
573
+ borderColor: theme.colors.lightGray,
574
+ borderRadius: 8,
575
+ minHeight: '100%',
576
+ opacity: isSoldOut ? 0.5 : 1
577
+ }}
578
+ width={56}
579
+ height={56}
580
+ cover
581
+ />
582
+ ) : (
583
+ <OIcon
584
+ url={'https://img.youtube.com/vi/' + img + '/0.jpg'}
585
+ style={{
586
+ borderColor: theme.colors.lightGray,
587
+ borderRadius: 8,
588
+ minHeight: '100%',
589
+ opacity: isSoldOut ? 0.5 : 1
590
+ }}
591
+ width={56}
592
+ height={56}
593
+ cover
594
+ />
595
+ )}
596
+ </View>
597
+ </TouchableOpacity>
590
598
 
591
- ))}
592
- </ScrollView>
599
+ ))}
600
+ </ScrollView>
601
+ </>
602
+ )}
593
603
  </>
594
604
  )}
595
605
  </WrapHeader>
@@ -727,7 +737,7 @@ export const ProductOptionsUI = (props: any) => {
727
737
  </OText>
728
738
  </TouchableOpacity>
729
739
  )}
730
- {product?.extras?.map((extra: any) =>
740
+ {suboptionsLength < 200 && product?.extras?.map((extra: any) =>
731
741
  <ExtraOptions key={extra.id} options={extra.options} {...extraOptionsProps} />
732
742
  )}
733
743
  </ExtraOptionWrap>
@@ -842,6 +852,7 @@ export const ProductOptionsUI = (props: any) => {
842
852
  }
843
853
  setIsScrollAvailable={setIsScrollAvailable}
844
854
  error={errors[`id:${option.id}`]}
855
+ enableIntersection={suboptionsLength >= 200}
845
856
  />
846
857
  );
847
858
  },
@@ -882,7 +893,7 @@ export const ProductOptionsUI = (props: any) => {
882
893
  {!!error && error?.length > 0 && (
883
894
  <NotFoundSource content={error[0]?.message || error[0]} />
884
895
  )}
885
- </ScrollView>
896
+ </IOScrollView>
886
897
  )}
887
898
  {!loading && !error && product && (
888
899
  <ProductActions ios={Platform?.OS === 'ios'} isColumn={isHaveWeight}>
@@ -1,5 +1,5 @@
1
- import React, { useState } from 'react'
2
- import { View, Animated, StyleSheet, Platform, TouchableOpacity } from 'react-native'
1
+ import React, { useEffect, useState } from 'react'
2
+ import { View, Animated, StyleSheet, TouchableOpacity } from 'react-native'
3
3
  import { useUtils, useLanguage, useOrder } from 'ordering-components/native'
4
4
  import { useTheme } from 'styled-components/native';
5
5
  import MaterialCommunityIcon from 'react-native-vector-icons/MaterialCommunityIcons'
@@ -39,29 +39,43 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
39
39
  } = props
40
40
 
41
41
  const theme = useTheme();
42
+ const hideProductImage = isFromCheckout
43
+ ? theme?.checkout?.components?.cart?.components?.product?.components?.image?.hidden
44
+ : theme?.confirmation?.components?.cart?.components?.products?.components?.photo?.hidden
42
45
 
46
+ const hideProductDummyLogo = theme?.business_view?.components?.products?.components?.product?.components?.dummy?.hidden
47
+ const hideProductCommentHide = isFromCheckout && theme?.checkout?.components?.cart?.components?.product?.components?.comments?.hidden
43
48
 
44
49
  const pickerStyle = StyleSheet.create({
45
50
  inputAndroid: {
46
- width: 34,
51
+ width: 45,
47
52
  textAlign: 'center',
48
53
  overflow: 'visible',
49
54
  fontSize: 12,
50
- height: 20,
51
- padding: 0,
52
- color: theme.colors.textNormal
55
+ height: 30,
56
+ color: theme.colors.textNormal,
57
+ backgroundColor: theme.colors.backgroundGray100,
58
+ paddingVertical: 8,
59
+ paddingRight: 10,
60
+ paddingLeft: 0,
61
+ borderRadius: 7.6,
53
62
  },
54
63
  inputIOS: {
55
- width: 34,
64
+ width: 45,
56
65
  textAlign: 'center',
57
66
  overflow: 'visible',
58
67
  fontSize: 12,
68
+ backgroundColor: theme.colors.backgroundGray100,
69
+ paddingVertical: 8,
70
+ paddingRight: 15,
71
+ paddingLeft: 0,
72
+ borderRadius: 7.6,
59
73
  },
60
74
  icon: {
61
75
  position: 'absolute',
62
76
  zIndex: 1,
63
- top: -4,
64
- end: -4,
77
+ top: 0,
78
+ end: 8,
65
79
  },
66
80
  placeholder: {
67
81
  color: theme.colors.secundaryContrast
@@ -75,9 +89,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
75
89
 
76
90
  const [isActive, setActiveState] = useState(false)
77
91
  const [isServiceOpen, setIsServiceOpen] = useState(false)
78
- // const [setHeight, setHeightState] = useState({ height: new Animated.Value(0) })
79
- // const [setRotate, setRotateState] = useState({ angle: new Animated.Value(0) })
80
- const [productQuantity, setProductQuantity] = useState(product.quantity.toString())
92
+ const [productQuantityState, setProductQuantityState] = useState<any>(product.quantity.toString())
81
93
 
82
94
  const productInfo = () => {
83
95
  if (isCartProduct) {
@@ -105,23 +117,9 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
105
117
  setIsServiceOpen(true)
106
118
  }
107
119
 
108
- /* const toggleAccordion = () => {
109
- if ((!product?.valid_menu && isCartProduct)) return
110
- if (isActive) {
111
- Animated.timing(setHeight.height, {
112
- toValue: 100,
113
- duration: 500,
114
- easing: Easing.linear,
115
- useNativeDriver: false,
116
- }).start()
117
- } else {
118
- setHeightState({height: new Animated.Value(0)})
119
- }
120
- }*/
121
-
122
120
  const handleChangeQuantity = (value: string) => {
123
121
  if (!orderState.loading) {
124
- setProductQuantity(value)
122
+ setProductQuantityState(value)
125
123
  if (parseInt(value) === 0) {
126
124
  onDeleteProduct && onDeleteProduct(product)
127
125
  } else {
@@ -135,10 +133,6 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
135
133
  return `${quantity} x ${name} ${pos} +${price}`
136
134
  }
137
135
 
138
- /*useEffect(() => {
139
- toggleAccordion()
140
- }, [isActive])*/
141
-
142
136
  const productOptions = getProductMax && [...Array(getProductMax(product) + 1),].map((_: any, opt: number) => {
143
137
  return {
144
138
  label: opt === 0 ? t('REMOVE', 'Remove') : opt.toString(),
@@ -146,19 +140,27 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
146
140
  }
147
141
  })
148
142
 
143
+ useEffect(() => {
144
+ if (product.quantity.toString() === productQuantityState || productQuantityState) {
145
+ setProductQuantityState(null)
146
+ }
147
+ }, [product.quantity])
148
+
149
149
  return (
150
150
  <>
151
151
  <AccordionSection>
152
152
  <Accordion
153
- isValid={product?.valid ?? true}
154
- onPress={() => (!product?.valid_menu && isCartProduct)
155
- ? {}
156
- : setActiveState(!isActive)}
157
153
  activeOpacity={1}
154
+ isValid={product?.valid ?? true}
155
+ onPress={
156
+ (!product?.valid_menu && isCartProduct) ||
157
+ !(productInfo().ingredients.length > 0 || productInfo().options.length > 0 || !!product.comment)
158
+ ? null : () => setActiveState(!isActive)
159
+ }
158
160
  >
159
161
  <View style={{ flexDirection: 'row', alignItems: 'flex-start' }}>
160
162
  <ContentInfo>
161
- {(product?.images || theme?.images?.dummies?.product) && (
163
+ {(product?.images || (!hideProductDummyLogo && theme?.images?.dummies?.product)) && !hideProductImage && (
162
164
  <ProductImage>
163
165
  {isFromCheckout ? (
164
166
  product?.images ? (
@@ -211,16 +213,20 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
211
213
  <RNPickerSelect
212
214
  items={productOptions}
213
215
  onValueChange={handleChangeQuantity}
214
- value={productQuantity}
216
+ value={productQuantityState ?? product.quantity.toString()}
215
217
  style={pickerStyle}
216
218
  useNativeAndroidPickerStyle={false}
217
219
  placeholder={{}}
218
- touchableWrapperProps={{
219
- style: {
220
- width: 40,
221
- }
222
- }}
223
- Icon={() => <View style={pickerStyle.icon}><OIcon src={theme.images.general.arrow_down} color={theme.colors.textNormal} width={8} /></View>}
220
+ touchableWrapperProps={{ style: { width: 45 } }}
221
+ Icon={() => (
222
+ <View style={pickerStyle.icon}>
223
+ <OIcon
224
+ src={theme.images.general.arrow_down}
225
+ color={theme.colors.textNormal}
226
+ width={8}
227
+ />
228
+ </View>
229
+ )}
224
230
  disabled={orderState.loading}
225
231
  />
226
232
  </ProductInfo>
@@ -281,21 +287,21 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
281
287
  )}
282
288
  </Accordion>
283
289
 
284
- <View style={{ display: isActive ? 'flex' : 'none', paddingStart: 40 }}>
290
+ <View style={{ display: isActive ? 'flex' : 'none', paddingStart: isFromCheckout ? 100 : 40, marginTop: isFromCheckout ? -80 : -30 }}>
285
291
  <Animated.View>
286
292
  <AccordionContent>
287
293
  {productInfo().ingredients.length > 0 && productInfo().ingredients.some((ingredient: any) => !ingredient.selected) && (
288
294
  <ProductOptionsList>
289
295
  <OText size={10} color={theme.colors.textSecondary}>{t('INGREDIENTS', 'Ingredients')}</OText>
290
- {productInfo().ingredients.map((ingredient: any) => !ingredient.selected && (
291
- <OText size={10} color={theme.colors.textThird} key={ingredient.id} style={{ marginLeft: 10 }}>{t('NO', 'No')} {ingredient.name}</OText>
296
+ {productInfo().ingredients.map((ingredient: any, i) => !ingredient.selected && (
297
+ <OText size={10} color={theme.colors.textThird} key={ingredient.id + i} style={{ marginLeft: 10 }}>{t('NO', 'No')} {ingredient.name}</OText>
292
298
  ))}
293
299
  </ProductOptionsList>
294
300
  )}
295
301
  {productInfo().options.length > 0 && (
296
302
  <ProductOptionsList>
297
- {productInfo().options.sort((a: any, b: any) => a.rank - b.rank).map((option: any, i: number) => (
298
- <ProductOption key={option.id + i}>
303
+ {productInfo().options.sort((a: any, b: any) => a.rank - b.rank).map((option: any) => (
304
+ <ProductOption key={option.id}>
299
305
  <OText size={10} color={theme.colors.textSecondary}>{option.name}</OText>
300
306
  {option.suboptions.map((suboption: any) => (
301
307
  <ProductSubOption key={suboption.id}>
@@ -313,7 +319,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
313
319
  ))}
314
320
  </ProductOptionsList>
315
321
  )}
316
- {!!product.comment && (
322
+ {!!product.comment && !hideProductCommentHide && (
317
323
  <ProductComment>
318
324
  <OText size={10} color={theme.colors.textSecondary}>{t('SPECIAL_COMMENT', 'Special Comment')}</OText>
319
325
  <OText size={10} color={theme.colors.textThird}>{product.comment}</OText>
@@ -17,9 +17,6 @@ export const Accordion = styled.TouchableOpacity`
17
17
 
18
18
  export const ProductInfo = styled.View`
19
19
  margin-horizontal: 7px;
20
- background-color: ${(props: any) => props.theme.colors.backgroundGray100};
21
- padding: 4px 12px 4px 0px;
22
- border-radius: 7.6px;
23
20
  `
24
21
 
25
22
  export const ProductQuantity = styled.View`
@@ -54,4 +51,6 @@ export const ProductSubOption = styled.View`
54
51
  margin-left: 0px;
55
52
  `
56
53
 
57
- export const ProductComment = styled.View``
54
+ export const ProductComment = styled.View`
55
+ margin-left: 20px;
56
+ `