ordering-ui-react-native 0.22.8 → 0.22.9-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/Checkout/index.tsx +40 -39
  5. package/src/components/StripeMethodForm/index.tsx +4 -2
  6. package/src/components/VerifyPhone/styles.tsx +1 -2
  7. package/src/context/OfflineActions/index.tsx +236 -0
  8. package/src/types/index.tsx +2 -1
  9. package/themes/business/index.tsx +2 -0
  10. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +9 -6
  11. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
  12. package/themes/business/src/components/BusinessController/index.tsx +8 -3
  13. package/themes/business/src/components/BusinessProductList/index.tsx +2 -1
  14. package/themes/business/src/components/Chat/index.tsx +15 -3
  15. package/themes/business/src/components/DriverMap/index.tsx +49 -27
  16. package/themes/business/src/components/FloatingButton/index.tsx +3 -2
  17. package/themes/business/src/components/GoogleMap/index.tsx +15 -8
  18. package/themes/business/src/components/LanguageSelector/index.tsx +2 -3
  19. package/themes/business/src/components/LanguageSelector/lang_country.json +515 -70
  20. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  21. package/themes/business/src/components/MapView/index.tsx +36 -17
  22. package/themes/business/src/components/NewOrderNotification/index.tsx +40 -27
  23. package/themes/business/src/components/OrderDetails/Business.tsx +38 -21
  24. package/themes/business/src/components/OrderDetails/Delivery.tsx +138 -55
  25. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +125 -43
  26. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +62 -24
  27. package/themes/business/src/components/OrderDetails/styles.tsx +39 -3
  28. package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +138 -64
  29. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +3 -2
  30. package/themes/business/src/components/OrderSummary/index.tsx +209 -73
  31. package/themes/business/src/components/OrdersListManager/index.tsx +13 -1
  32. package/themes/business/src/components/OrdersOption/index.tsx +217 -156
  33. package/themes/business/src/components/PhoneInputNumber/index.tsx +8 -5
  34. package/themes/business/src/components/PreviousMessages/index.tsx +26 -3
  35. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +39 -16
  36. package/themes/business/src/components/PreviousOrders/index.tsx +76 -66
  37. package/themes/business/src/components/PrinterEdition/MessageAlert.tsx +33 -0
  38. package/themes/business/src/components/PrinterEdition/index.tsx +431 -0
  39. package/themes/business/src/components/PrinterEdition/printerList.tsx +23 -0
  40. package/themes/business/src/components/PrinterEdition/styles.tsx +61 -0
  41. package/themes/business/src/components/PrinterSettings/index.tsx +162 -173
  42. package/themes/business/src/components/PrinterSettings/styles.tsx +14 -1
  43. package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
  44. package/themes/business/src/components/StoresList/index.tsx +2 -2
  45. package/themes/business/src/components/UserProfileForm/index.tsx +16 -17
  46. package/themes/business/src/components/WebsocketStatus/index.tsx +2 -2
  47. package/themes/business/src/components/shared/OTextarea.tsx +8 -9
  48. package/themes/business/src/layouts/SafeAreaContainer.tsx +35 -19
  49. package/themes/business/src/types/index.tsx +13 -4
  50. package/themes/business/src/utils/index.tsx +25 -1
  51. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  52. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  53. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  54. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  55. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  56. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  57. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  58. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  59. package/themes/original/index.tsx +11 -0
  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 +5 -8
  65. package/themes/original/src/components/BusinessController/index.tsx +5 -5
  66. package/themes/original/src/components/BusinessItemAccordion/index.tsx +13 -5
  67. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +103 -92
  68. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +8 -6
  69. package/themes/original/src/components/BusinessListingSearch/index.tsx +1 -2
  70. package/themes/original/src/components/BusinessPreorder/index.tsx +46 -28
  71. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +73 -70
  72. package/themes/original/src/components/BusinessProductsList/index.tsx +6 -7
  73. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  74. package/themes/original/src/components/BusinessProductsListing/index.tsx +18 -6
  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 +38 -14
  81. package/themes/original/src/components/CartContent/index.tsx +2 -4
  82. package/themes/original/src/components/Checkout/index.tsx +112 -58
  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/GiftCardUI/index.tsx +15 -17
  90. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +3 -7
  91. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +24 -32
  92. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +7 -9
  93. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +11 -12
  94. package/themes/original/src/components/GoogleMap/index.tsx +39 -18
  95. package/themes/original/src/components/Help/index.tsx +2 -0
  96. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
  97. package/themes/original/src/components/Home/index.tsx +3 -11
  98. package/themes/original/src/components/LoginForm/Otp/index.tsx +0 -3
  99. package/themes/original/src/components/LoginForm/index.tsx +4 -7
  100. package/themes/original/src/components/MessageListing/index.tsx +2 -1
  101. package/themes/original/src/components/Messages/index.tsx +27 -19
  102. package/themes/original/src/components/MomentOption/TimeListItem.tsx +56 -0
  103. package/themes/original/src/components/MomentOption/index.tsx +80 -51
  104. package/themes/original/src/components/MomentSelector/index.tsx +5 -2
  105. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +7 -3
  106. package/themes/original/src/components/MultiCheckout/index.tsx +55 -27
  107. package/themes/original/src/components/MultiOrdersDetails/index.tsx +1 -0
  108. package/themes/original/src/components/MyOrders/index.tsx +2 -2
  109. package/themes/original/src/components/NavBar/index.tsx +7 -4
  110. package/themes/original/src/components/NetworkError/index.tsx +0 -5
  111. package/themes/original/src/components/NotFoundSource/index.tsx +0 -3
  112. package/themes/original/src/components/OrderDetails/OrderEta.tsx +4 -3
  113. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +13 -10
  114. package/themes/original/src/components/OrderDetails/index.tsx +44 -21
  115. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  116. package/themes/original/src/components/OrderProgress/index.tsx +5 -4
  117. package/themes/original/src/components/OrderSummary/index.tsx +29 -10
  118. package/themes/original/src/components/OrderTypeSelector/index.tsx +7 -6
  119. package/themes/original/src/components/OrdersOption/index.tsx +3 -6
  120. package/themes/original/src/components/PaymentOptionStripe/index.tsx +0 -5
  121. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  122. package/themes/original/src/components/PaymentOptions/index.tsx +0 -2
  123. package/themes/original/src/components/PlaceSpot/index.tsx +1 -3
  124. package/themes/original/src/components/PreviousOrders/index.tsx +1 -2
  125. package/themes/original/src/components/ProductForm/ActionButton.tsx +17 -20
  126. package/themes/original/src/components/ProductForm/index.tsx +107 -102
  127. package/themes/original/src/components/ProductItemAccordion/index.tsx +50 -43
  128. package/themes/original/src/components/ProductItemAccordion/styles.tsx +0 -3
  129. package/themes/original/src/components/ProductOptionSubOption/index.tsx +16 -8
  130. package/themes/original/src/components/ProfessionalProfile/index.tsx +4 -5
  131. package/themes/original/src/components/Promotions/index.tsx +6 -9
  132. package/themes/original/src/components/ReviewDriver/index.tsx +1 -1
  133. package/themes/original/src/components/ReviewOrder/index.tsx +2 -2
  134. package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
  135. package/themes/original/src/components/ReviewTrigger/index.tsx +2 -2
  136. package/themes/original/src/components/ServiceForm/index.tsx +52 -54
  137. package/themes/original/src/components/Sessions/index.tsx +3 -3
  138. package/themes/original/src/components/SignupForm/index.tsx +86 -78
  139. package/themes/original/src/components/SingleOrderCard/index.tsx +6 -4
  140. package/themes/original/src/components/SingleProductCard/index.tsx +5 -5
  141. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  142. package/themes/original/src/components/StripeCardForm/index.tsx +0 -3
  143. package/themes/original/src/components/StripeCardsList/index.tsx +10 -3
  144. package/themes/original/src/components/StripeElementsForm/index.tsx +76 -62
  145. package/themes/original/src/components/StripeElementsForm/naked.tsx +48 -1
  146. package/themes/original/src/components/StripeRedirectForm/index.tsx +0 -3
  147. package/themes/original/src/components/TaxInformation/index.tsx +3 -2
  148. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +10 -7
  149. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +8 -3
  150. package/themes/original/src/components/UserDetails/index.tsx +17 -16
  151. package/themes/original/src/components/UserFormDetails/index.tsx +159 -133
  152. package/themes/original/src/components/UserProfile/index.tsx +9 -1
  153. package/themes/original/src/components/UserVerification/index.tsx +14 -4
  154. package/themes/original/src/components/Wallets/index.tsx +6 -3
  155. package/themes/original/src/components/WebsocketStatus/index.tsx +1 -4
  156. package/themes/original/src/components/shared/OAlert.tsx +2 -1
  157. package/themes/original/src/components/shared/OButton.tsx +5 -4
  158. package/themes/original/src/components/shared/OInput.tsx +4 -8
  159. package/themes/original/src/components/shared/OModal.tsx +7 -2
  160. package/themes/original/src/types/index.tsx +5 -1
  161. package/themes/original/src/utils/index.tsx +30 -1
  162. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -45,7 +45,7 @@ const PaymentOptionWalletUI = (props: any) => {
45
45
  new Array(walletsState.result?.length).fill(false)
46
46
  );
47
47
 
48
- const creditBalance: any = (wallet: any) => ` = ${parsePrice(wallet.balance / wallet.redemption_rate, { isTruncable: true })}`
48
+ const creditBalance: any = (wallet: any) => ` = ${parsePrice(wallet.balance / wallet.redemption_rate)}`
49
49
 
50
50
  const walletName: any = {
51
51
  cash: {
@@ -87,65 +87,65 @@ const PaymentOptionWalletUI = (props: any) => {
87
87
  {!walletsState.loading &&
88
88
  !walletsState.error &&
89
89
  walletsState.result?.length > 0 &&
90
- (
91
- <>
92
- {walletsState.result?.map((wallet: any, idx: any) => wallet.valid && wallet.balance >= 0 && walletName[wallet.type]?.isActive && (
93
- <Container
94
- key={wallet.id}
95
- isBottomBorder={idx === walletsState.result?.filter((wallet: any) => wallet.valid)?.length - 1}
96
- onPress={() => handleOnChange(idx, wallet)}
97
- disabled={(cart?.balance === 0 && !checkedState[idx]) || wallet.balance === 0}
98
- >
99
- <SectionLeft>
100
- {checkedState[idx] ? (
101
- <MaterialCommunityIcons
102
- name="checkbox-marked"
103
- size={25}
104
- color={theme.colors.primary}
105
- />
106
- ) : (
107
- <MaterialCommunityIcons
108
- name="checkbox-blank-outline"
109
- size={25}
110
- color={theme.colors.disabled}
111
- />
112
- )}
113
- <View style={{ alignItems: 'baseline', marginLeft: 5 }}>
114
- <View>
115
- <OText
116
- style={((cart?.balance === 0 && !checkedState[idx]) || wallet.balance === 0) ? {
117
- color: theme.colors.disabled
118
- } : {}}
119
- >
120
- {walletName[wallet.type]?.name}
121
- </OText>
122
- </View>
90
+ (
91
+ <>
92
+ {walletsState.result?.map((wallet: any, idx: any) => wallet.valid && wallet.balance >= 0 && walletName[wallet.type]?.isActive && (
93
+ <Container
94
+ key={wallet.id}
95
+ isBottomBorder={idx === walletsState.result?.filter((wallet: any) => wallet.valid)?.length - 1}
96
+ onPress={() => handleOnChange(idx, wallet)}
97
+ disabled={(cart?.balance === 0 && !checkedState[idx]) || wallet.balance === 0}
98
+ >
99
+ <SectionLeft>
100
+ {checkedState[idx] ? (
101
+ <MaterialCommunityIcons
102
+ name="checkbox-marked"
103
+ size={25}
104
+ color={theme.colors.primary}
105
+ />
106
+ ) : (
107
+ <MaterialCommunityIcons
108
+ name="checkbox-blank-outline"
109
+ size={25}
110
+ color={theme.colors.disabled}
111
+ />
112
+ )}
113
+ <View style={{ alignItems: 'baseline', marginLeft: 5 }}>
114
+ <View>
115
+ <OText
116
+ style={((cart?.balance === 0 && !checkedState[idx]) || wallet.balance === 0) ?{
117
+ color: theme.colors.disabled
118
+ } : {}}
119
+ >
120
+ {walletName[wallet.type]?.name}
121
+ </OText>
123
122
  </View>
124
- </SectionLeft>
125
-
126
- <View style={{ maxWidth: '35%', alignItems: 'flex-end' }}>
127
- {wallet.type === 'cash' && (
128
- <OText>
129
- {parsePrice(wallet?.balance, { isTruncable: true })}
123
+ </View>
124
+ </SectionLeft>
125
+
126
+ <View style={{maxWidth: '35%', alignItems: 'flex-end' }}>
127
+ {wallet.type === 'cash' && (
128
+ <OText>
129
+ {parsePrice(wallet?.balance)}
130
+ </OText>
131
+ )}
132
+ {wallet.type === 'credit_point' && (
133
+ <OText>
134
+ <OText color={theme.colors.primary} weight='bold'>
135
+ {`${wallet?.balance} ${t('POINTS', 'Points')}`}
130
136
  </OText>
131
- )}
132
- {wallet.type === 'credit_point' && (
133
137
  <OText>
134
- <OText color={theme.colors.primary} weight='bold'>
135
- {`${wallet?.balance} ${t('POINTS', 'Points')}`}
136
- </OText>
137
- <OText>
138
- {wallet?.balance > 0
139
- ? creditBalance(wallet)
140
- : null}
141
- </OText>
138
+ {wallet?.balance > 0
139
+ ? creditBalance(wallet)
140
+ : null}
142
141
  </OText>
143
- )}
144
- </View>
145
- </Container>
146
- ))}
147
- </>
148
- )}
142
+ </OText>
143
+ )}
144
+ </View>
145
+ </Container>
146
+ ))}
147
+ </>
148
+ )}
149
149
 
150
150
  {walletsState?.loading && (
151
151
  <View>
@@ -326,7 +326,6 @@ const PaymentOptionsUI = (props: any) => {
326
326
  <OButton
327
327
  text={t('ADD_PAYMENT_CARD', 'Add New Payment Card')}
328
328
  bgColor={theme.colors.white}
329
- borderColor={theme.colors.primary}
330
329
  style={styles.btnAddStyle}
331
330
  textStyle={{ color: theme.colors.primary, fontSize: 12 }}
332
331
  imgRightSrc={null}
@@ -426,7 +425,6 @@ const PaymentOptionsUI = (props: any) => {
426
425
  <OButton
427
426
  text={t('ADD_PAYMENT_CARD', 'Add New Payment Card')}
428
427
  bgColor={theme.colors.white}
429
- borderColor={theme.colors.primary}
430
428
  style={styles.btnAddStyle}
431
429
  textStyle={{ color: theme.colors.primary, fontSize: 12 }}
432
430
  imgRightSrc={null}
@@ -236,9 +236,7 @@ const PlaceSpotUI = (props: PlaceSpotParams) => {
236
236
  <View style={{ alignItems: 'flex-start' }}>
237
237
  <OButton
238
238
  onClick={() => onChangeSpot()}
239
- bgColor={theme.colors.primary}
240
- borderColor={theme.colors.primary}
241
- textStyle={{ color: 'white', fontSize: 12 }}
239
+ textStyle={{ fontSize: 12 }}
242
240
  imgRightSrc={null}
243
241
  text={t('UPDATE_SPOT_NUMBER', 'Update')}
244
242
  isDisabled={(!spotNumber && !Object.values(vehicle).every(e => e))}
@@ -27,7 +27,7 @@ export const PreviousOrders = (props: PreviousOrdersParams) => {
27
27
 
28
28
  const [, t] = useLanguage();
29
29
 
30
- const pastOrders = [1, 2, 5, 6, 10, 11, 12, 15, 16, 17]
30
+ const pastOrders = [1, 2, 5, 6, 10, 11, 12, 15, 16, 17]
31
31
 
32
32
  return (
33
33
  <View style={{ marginBottom: 30 }}>
@@ -49,7 +49,6 @@ export const PreviousOrders = (props: PreviousOrdersParams) => {
49
49
  onClick={loadMoreOrders}
50
50
  text={t('LOAD_MORE_ORDERS', 'Load more orders')}
51
51
  imgRightSrc={null}
52
- textStyle={{ color: theme.colors.white }}
53
52
  style={{ borderRadius: 7.6, shadowOpacity: 0, marginTop: 20 }}
54
53
  />
55
54
  </WrappButton>
@@ -5,7 +5,7 @@ import { TouchableOpacity, View } from 'react-native'
5
5
  import { OButton, OText } from '../shared';
6
6
  import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder';
7
7
 
8
- export const ActionButton = (props : any) => {
8
+ export const ActionButton = (props: any) => {
9
9
  const {
10
10
  navigation,
11
11
  isHaveWeight,
@@ -23,27 +23,29 @@ export const ActionButton = (props : any) => {
23
23
  handleUpdateGuest,
24
24
  actionStatus
25
25
  } = props
26
- const [,t] = useLanguage()
26
+ const [, t] = useLanguage()
27
27
  const [{ auth }] = useSession()
28
28
  const [orderState] = useOrder()
29
29
  const theme = useTheme()
30
- const [{ configs }] = useConfig()
30
+ const [{ configs }] = useConfig()
31
31
  const unaddressedTypes = configs?.unaddressed_order_types_allowed?.value.split('|').map((value: any) => Number(value)) || []
32
- const isAllowUnaddressOrderType = unaddressedTypes.includes(orderState?.options?.type)
33
-
32
+ const isAllowUnaddressOrderType = unaddressedTypes.includes(orderState?.options?.type)
34
33
  const saveErrors =
35
- orderState.loading ||
36
- maxProductQuantity === 0 ||
37
- Object.keys(errors)?.length > 0;
34
+ orderState.loading ||
35
+ maxProductQuantity === 0 ||
36
+ Object.keys(errors)?.length > 0;
37
+ const buttonColor = saveErrors || isSoldOut || maxProductQuantity <= 0 || (product?.minimum_per_order && ((productCart?.quantity + productAddedToCartLength) < product?.minimum_per_order)) || (product?.maximum_per_order && ((productCart?.quantity + productAddedToCartLength) > product?.maximum_per_order))
38
+
39
+
38
40
 
39
41
  return (
40
42
  <View
41
43
  style={{
42
44
  width: isHaveWeight ? '100%' : ((isSoldOut || maxProductQuantity <= 0) ? '60%' : '40%'),
43
45
  }}>
44
- {((productCart &&
46
+ {(productCart &&
45
47
  auth &&
46
- (orderState.options?.address_id || isAllowUnaddressOrderType)) || (isSoldOut || maxProductQuantity <= 0)) && (
48
+ ((orderState.options?.address_id || isAllowUnaddressOrderType) || (isSoldOut || maxProductQuantity <= 0))) && (
47
49
  <OButton
48
50
  onClick={() => handleSaveProduct()}
49
51
  imgRightSrc=""
@@ -55,15 +57,11 @@ export const ActionButton = (props : any) => {
55
57
  ? t('UPDATE', 'Update')
56
58
  : t('ADD', 'Add')
57
59
  }`}
58
- isDisabled={isSoldOut || maxProductQuantity <= 0 || (product?.minimum_per_order && ((productCart?.quantity + productAddedToCartLength) < product?.minimum_per_order)) || (product?.maximum_per_order && ((productCart?.quantity + productAddedToCartLength) > product?.maximum_per_order))}
60
+ isDisabled={buttonColor}
59
61
  textStyle={{
60
- color: saveErrors || isSoldOut || maxProductQuantity <= 0 ? theme.colors.primary : theme.colors.white,
61
62
  fontSize: orderState.loading || editMode ? 10 : 14
62
63
  }}
63
64
  style={{
64
- backgroundColor: saveErrors || isSoldOut || maxProductQuantity <= 0 || (product?.minimum_per_order && ((productCart?.quantity + productAddedToCartLength) < product?.minimum_per_order)) || (product?.maximum_per_order && ((productCart?.quantity + productAddedToCartLength) > product?.maximum_per_order)) ? theme.colors.lightGray : theme.colors.primary,
65
- borderColor: saveErrors || isSoldOut || maxProductQuantity <= 0 || (product?.minimum_per_order && ((productCart?.quantity + productAddedToCartLength) < product?.minimum_per_order)) || (product?.maximum_per_order && ((productCart?.quantity + productAddedToCartLength) > product?.maximum_per_order)) ? theme.colors.white : theme.colors.primary,
66
- opacity: saveErrors || isSoldOut || maxProductQuantity <= 0 ? 0.3 : 1,
67
65
  borderRadius: 7.6,
68
66
  height: 44,
69
67
  shadowOpacity: 0,
@@ -82,7 +80,7 @@ export const ActionButton = (props : any) => {
82
80
  textStyle={{ fontSize: 10 }}
83
81
  />
84
82
  ) : (
85
- <OButton onClick={navigation.navigate('AddressList')} />
83
+ <OButton onClick={() => navigation.navigate('AddressList')} />
86
84
  ))}
87
85
  {!auth && (
88
86
  <OButton
@@ -94,13 +92,12 @@ export const ActionButton = (props : any) => {
94
92
  : t('LOGIN_SIGNUP', 'Login / Sign Up')
95
93
  }
96
94
  imgRightSrc=""
97
- textStyle={{ color: theme.colors.primary, fontSize: 13, textAlign: 'center' }}
95
+ textStyle={{ fontSize: 13, textAlign: 'center' }}
98
96
  style={{
99
97
  height: 42,
100
- borderColor: theme.colors.primary,
101
- backgroundColor: theme.colors.white,
102
98
  paddingLeft: 0,
103
- paddingRight: 0
99
+ paddingRight: 0,
100
+ borderRadius: 7.6
104
101
  }}
105
102
  />
106
103
  )}
@@ -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: {
@@ -487,114 +488,118 @@ export const ProductOptionsUI = (props: any) => {
487
488
  </View>
488
489
  ) : (
489
490
  <>
490
- <Swiper
491
- loop={false}
492
- ref={swiperRef}
493
- showsButtons={true}
494
- style={styles.mainSwiper}
495
- showsPagination={false}
496
- onIndexChanged={(index : any) => handleChangeMainIndex(index)}
497
- prevButton={
498
- <View style={styles.swiperButton}>
499
- <IconAntDesign
500
- name="caretleft"
501
- color={theme.colors.white}
502
- size={13}
503
- // style={styles.starIcon}
504
- />
505
- </View>
506
- }
507
- nextButton={
508
- <View style={styles.swiperButton}>
509
- <IconAntDesign
510
- name="caretright"
511
- color={theme.colors.white}
512
- size={13}
513
- // style={styles.starIcon}
514
- />
515
- </View>
516
- }
517
- >
518
- {gallery && gallery?.length > 0 && gallery.map((img : any, i: number) => (
519
- <View
520
- style={styles.slide1}
521
- key={i}
522
- >
523
- {(String(img).includes('http') || typeof img === 'number') ? (
524
- <FastImage
525
- style={{ height: '100%', opacity: isSoldOut ? 0.5 : 1, aspectRatio: 16 / 9 }}
526
- source={typeof img !== 'number' ? {
527
- uri: optimizeImage(img, 'h_1024,c_limit'),
528
- priority: FastImage.priority.normal,
529
- } : img}
530
- />
531
- ) : (
532
- <>
533
- <YoutubePlayer
534
- height={'100%'}
535
- width={'100%'}
536
- play={playing}
537
- videoId={img}
538
- 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}
539
507
  />
540
- <Button title={playing ? "pause" : "play"} onPress={togglePlaying} />
541
- </>
542
- )}
543
- </View>
544
- ))}
545
- </Swiper>
546
- <ScrollView
547
- horizontal
548
- contentContainerStyle={{
549
- paddingHorizontal: 20,
550
- paddingVertical: 15
551
- }}
552
- >
553
- {gallery?.length > 1 && gallery.map((img: any, index: number) => (
554
- <TouchableOpacity
555
- key={index}
556
- onPress={() => handleClickThumb(index)}
557
- >
558
- <View
559
- style={{
560
- height: 56,
561
- borderRadius: 8,
562
- margin: 8,
563
- opacity: index === thumbsSwiper ? 1 : 0.8
564
- }}
565
- >
566
- {String(img).includes('http') ? (
567
- <OIcon
568
- url={img}
569
- style={{
570
- borderColor: theme.colors.lightGray,
571
- borderRadius: 8,
572
- minHeight: '100%',
573
- opacity: isSoldOut ? 0.5 : 1
574
- }}
575
- width={56}
576
- height={56}
577
- 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}
578
517
  />
579
- ) : (
580
- <OIcon
581
- 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
582
562
  style={{
583
- borderColor: theme.colors.lightGray,
563
+ height: 56,
584
564
  borderRadius: 8,
585
- minHeight: '100%',
586
- opacity: isSoldOut ? 0.5 : 1
565
+ margin: 8,
566
+ opacity: index === thumbsSwiper ? 1 : 0.8
587
567
  }}
588
- width={56}
589
- height={56}
590
- cover
591
- />
592
- )}
593
- </View>
594
- </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>
595
598
 
596
- ))}
597
- </ScrollView>
599
+ ))}
600
+ </ScrollView>
601
+ </>
602
+ )}
598
603
  </>
599
604
  )}
600
605
  </WrapHeader>
@@ -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,28 +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
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
42
48
 
43
49
  const pickerStyle = StyleSheet.create({
44
50
  inputAndroid: {
45
- width: 34,
51
+ width: 45,
46
52
  textAlign: 'center',
47
53
  overflow: 'visible',
48
54
  fontSize: 12,
49
- height: 20,
50
- padding: 0,
51
- 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,
52
62
  },
53
63
  inputIOS: {
54
- width: 34,
64
+ width: 45,
55
65
  textAlign: 'center',
56
66
  overflow: 'visible',
57
67
  fontSize: 12,
68
+ backgroundColor: theme.colors.backgroundGray100,
69
+ paddingVertical: 8,
70
+ paddingRight: 15,
71
+ paddingLeft: 0,
72
+ borderRadius: 7.6,
58
73
  },
59
74
  icon: {
60
75
  position: 'absolute',
61
76
  zIndex: 1,
62
- top: -4,
63
- end: -4,
77
+ top: 0,
78
+ end: 8,
64
79
  },
65
80
  placeholder: {
66
81
  color: theme.colors.secundaryContrast
@@ -74,9 +89,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
74
89
 
75
90
  const [isActive, setActiveState] = useState(false)
76
91
  const [isServiceOpen, setIsServiceOpen] = useState(false)
77
- const [productQuantityState, setProductQuantityState] = useState(product.quantity.toString())
78
- // const [setHeight, setHeightState] = useState({ height: new Animated.Value(0) })
79
- // const [setRotate, setRotateState] = useState({ angle: new Animated.Value(0) })
92
+ const [productQuantityState, setProductQuantityState] = useState<any>(product.quantity.toString())
80
93
 
81
94
  const productInfo = () => {
82
95
  if (isCartProduct) {
@@ -104,20 +117,6 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
104
117
  setIsServiceOpen(true)
105
118
  }
106
119
 
107
- /* const toggleAccordion = () => {
108
- if ((!product?.valid_menu && isCartProduct)) return
109
- if (isActive) {
110
- Animated.timing(setHeight.height, {
111
- toValue: 100,
112
- duration: 500,
113
- easing: Easing.linear,
114
- useNativeDriver: false,
115
- }).start()
116
- } else {
117
- setHeightState({height: new Animated.Value(0)})
118
- }
119
- }*/
120
-
121
120
  const handleChangeQuantity = (value: string) => {
122
121
  if (!orderState.loading) {
123
122
  setProductQuantityState(value)
@@ -134,10 +133,6 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
134
133
  return `${quantity} x ${name} ${pos} +${price}`
135
134
  }
136
135
 
137
- /*useEffect(() => {
138
- toggleAccordion()
139
- }, [isActive])*/
140
-
141
136
  const productOptions = getProductMax && [...Array(getProductMax(product) + 1),].map((_: any, opt: number) => {
142
137
  return {
143
138
  label: opt === 0 ? t('REMOVE', 'Remove') : opt.toString(),
@@ -145,19 +140,27 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
145
140
  }
146
141
  })
147
142
 
143
+ useEffect(() => {
144
+ if (product.quantity.toString() === productQuantityState || productQuantityState) {
145
+ setProductQuantityState(null)
146
+ }
147
+ }, [product.quantity])
148
+
148
149
  return (
149
150
  <>
150
151
  <AccordionSection>
151
152
  <Accordion
152
- isValid={product?.valid ?? true}
153
- onPress={() => (!product?.valid_menu && isCartProduct)
154
- ? {}
155
- : setActiveState(!isActive)}
156
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
+ }
157
160
  >
158
161
  <View style={{ flexDirection: 'row', alignItems: 'flex-start' }}>
159
162
  <ContentInfo>
160
- {(product?.images || theme?.images?.dummies?.product) && (
163
+ {(product?.images || (!hideProductDummyLogo && theme?.images?.dummies?.product)) && !hideProductImage && (
161
164
  <ProductImage>
162
165
  {isFromCheckout ? (
163
166
  product?.images ? (
@@ -210,16 +213,20 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
210
213
  <RNPickerSelect
211
214
  items={productOptions}
212
215
  onValueChange={handleChangeQuantity}
213
- value={productQuantityState}
216
+ value={productQuantityState ?? product.quantity.toString()}
214
217
  style={pickerStyle}
215
218
  useNativeAndroidPickerStyle={false}
216
219
  placeholder={{}}
217
- touchableWrapperProps={{
218
- style: {
219
- width: 40,
220
- }
221
- }}
222
- 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
+ )}
223
230
  disabled={orderState.loading}
224
231
  />
225
232
  </ProductInfo>
@@ -312,7 +319,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
312
319
  ))}
313
320
  </ProductOptionsList>
314
321
  )}
315
- {!!product.comment && (
322
+ {!!product.comment && !hideProductCommentHide && (
316
323
  <ProductComment>
317
324
  <OText size={10} color={theme.colors.textSecondary}>{t('SPECIAL_COMMENT', 'Special Comment')}</OText>
318
325
  <OText size={10} color={theme.colors.textThird}>{product.comment}</OText>