ordering-ui-react-native 0.22.71 → 0.22.72-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 (141) hide show
  1. package/package.json +5 -7
  2. package/src/components/BusinessesListing/index.tsx +1 -1
  3. package/src/components/Checkout/index.tsx +40 -39
  4. package/src/components/VerifyPhone/styles.tsx +1 -2
  5. package/src/context/OfflineActions/index.tsx +236 -0
  6. package/src/providers/AlertProvider.tsx +3 -1
  7. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +5 -3
  8. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
  9. package/themes/business/src/components/BusinessController/index.tsx +8 -3
  10. package/themes/business/src/components/BusinessProductList/index.tsx +3 -2
  11. package/themes/business/src/components/Chat/index.tsx +15 -3
  12. package/themes/business/src/components/DriverMap/index.tsx +44 -33
  13. package/themes/business/src/components/FloatingButton/index.tsx +3 -2
  14. package/themes/business/src/components/LanguageSelector/index.tsx +1 -1
  15. package/themes/business/src/components/LoginForm/index.tsx +123 -98
  16. package/themes/business/src/components/LogoutButton/index.tsx +13 -4
  17. package/themes/business/src/components/MapView/RenderMarker.tsx +146 -0
  18. package/themes/business/src/components/MapView/index.tsx +68 -142
  19. package/themes/business/src/components/NewOrderNotification/index.tsx +38 -54
  20. package/themes/business/src/components/OrderDetails/Business.tsx +56 -20
  21. package/themes/business/src/components/OrderDetails/Delivery.tsx +123 -54
  22. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +146 -36
  23. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +51 -28
  24. package/themes/business/src/components/OrderDetails/styles.tsx +39 -3
  25. package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +17 -16
  26. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +3 -2
  27. package/themes/business/src/components/OrderSummary/index.tsx +271 -176
  28. package/themes/business/src/components/OrdersListManager/index.tsx +13 -1
  29. package/themes/business/src/components/OrdersOption/index.tsx +219 -144
  30. package/themes/business/src/components/OrdersOption/styles.tsx +14 -0
  31. package/themes/business/src/components/PreviousMessages/index.tsx +26 -3
  32. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +20 -8
  33. package/themes/business/src/components/PreviousOrders/index.tsx +74 -66
  34. package/themes/business/src/components/PreviousOrders/styles.tsx +2 -1
  35. package/themes/business/src/components/PrinterEdition/MessageAlert.tsx +33 -0
  36. package/themes/business/src/components/PrinterEdition/index.tsx +143 -75
  37. package/themes/business/src/components/PrinterEdition/printerList.tsx +23 -0
  38. package/themes/business/src/components/PrinterSettings/index.tsx +1 -1
  39. package/themes/business/src/components/ProductItemAccordion/index.tsx +15 -16
  40. package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
  41. package/themes/business/src/components/StoresList/index.tsx +2 -2
  42. package/themes/business/src/components/UserProfileForm/index.tsx +48 -10
  43. package/themes/business/src/components/UserProfileForm/styles.tsx +7 -0
  44. package/themes/business/src/components/WebsocketStatus/index.tsx +2 -2
  45. package/themes/business/src/config/currency.tsx +1010 -0
  46. package/themes/business/src/hooks/useLocation.tsx +16 -12
  47. package/themes/business/src/layouts/SafeAreaContainer.tsx +35 -19
  48. package/themes/business/src/types/index.tsx +28 -4
  49. package/themes/business/src/utils/index.tsx +28 -3
  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 +9 -5
  54. package/themes/kiosk/src/components/CustomerName/index.tsx +1 -1
  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/PaymentOptions/index.tsx +121 -57
  59. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  60. package/themes/original/index.tsx +223 -219
  61. package/themes/original/src/components/AddressForm/index.tsx +922 -885
  62. package/themes/original/src/components/AppleLogin/index.tsx +3 -4
  63. package/themes/original/src/components/BusinessController/index.tsx +4 -2
  64. package/themes/original/src/components/BusinessItemAccordion/index.tsx +10 -4
  65. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +103 -92
  66. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +7 -3
  67. package/themes/original/src/components/BusinessListingSearch/index.tsx +8 -13
  68. package/themes/original/src/components/BusinessPreorder/index.tsx +30 -17
  69. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +73 -70
  70. package/themes/original/src/components/BusinessProductsList/index.tsx +6 -7
  71. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  72. package/themes/original/src/components/BusinessProductsListing/index.tsx +5 -4
  73. package/themes/original/src/components/BusinessTypeFilter/index.tsx +9 -8
  74. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  75. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
  76. package/themes/original/src/components/Cart/index.tsx +44 -12
  77. package/themes/original/src/components/CartContent/index.tsx +0 -2
  78. package/themes/original/src/components/Checkout/index.tsx +126 -98
  79. package/themes/original/src/components/ForgotPasswordForm/index.tsx +1 -2
  80. package/themes/original/src/components/GPSButton/index.tsx +2 -1
  81. package/themes/original/src/components/GoogleMap/index.tsx +3 -2
  82. package/themes/original/src/components/Help/functions.tsx +76 -0
  83. package/themes/original/src/components/Help/index.tsx +74 -29
  84. package/themes/original/src/components/Help/styles.tsx +4 -1
  85. package/themes/original/src/components/HelpOptions/index.tsx +53 -0
  86. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
  87. package/themes/original/src/components/Home/index.tsx +36 -11
  88. package/themes/original/src/components/LastOrder/index.tsx +1 -1
  89. package/themes/original/src/components/LoginForm/index.tsx +11 -5
  90. package/themes/original/src/components/MessageListing/index.tsx +1 -1
  91. package/themes/original/src/components/Messages/index.tsx +562 -555
  92. package/themes/original/src/components/MomentOption/TimeListItem.tsx +56 -0
  93. package/themes/original/src/components/MomentOption/index.tsx +141 -61
  94. package/themes/original/src/components/MomentOption/styles.tsx +1 -1
  95. package/themes/original/src/components/MomentSelector/index.tsx +5 -2
  96. package/themes/original/src/components/MultiCheckout/index.tsx +78 -36
  97. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +2 -2
  98. package/themes/original/src/components/MultiOrdersDetails/index.tsx +2 -2
  99. package/themes/original/src/components/NavBar/index.tsx +6 -2
  100. package/themes/original/src/components/NotFoundSource/index.tsx +40 -39
  101. package/themes/original/src/components/NotFoundSource/styles.tsx +18 -9
  102. package/themes/original/src/components/OrderDetails/OrderEta.tsx +4 -3
  103. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +11 -4
  104. package/themes/original/src/components/OrderDetails/index.tsx +45 -21
  105. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  106. package/themes/original/src/components/OrderProgress/index.tsx +5 -4
  107. package/themes/original/src/components/OrderSummary/index.tsx +32 -11
  108. package/themes/original/src/components/OrderTypeSelector/index.tsx +120 -120
  109. package/themes/original/src/components/OrdersOption/index.tsx +325 -325
  110. package/themes/original/src/components/PaymentOptionWallet/index.tsx +1 -0
  111. package/themes/original/src/components/PaymentOptions/index.tsx +471 -459
  112. package/themes/original/src/components/PhoneInputNumber/index.tsx +92 -7
  113. package/themes/original/src/components/ProductForm/ActionButton.tsx +6 -10
  114. package/themes/original/src/components/ProductItemAccordion/index.tsx +28 -37
  115. package/themes/original/src/components/ProductOptionSubOption/index.tsx +15 -14
  116. package/themes/original/src/components/ServiceForm/index.tsx +2 -2
  117. package/themes/original/src/components/SignupForm/index.tsx +40 -24
  118. package/themes/original/src/components/SingleOrderCard/index.tsx +8 -5
  119. package/themes/original/src/components/SingleProductCard/index.tsx +3 -4
  120. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  121. package/themes/original/src/components/StripeCardsList/index.tsx +9 -4
  122. package/themes/original/src/components/StripeElementsForm/index.tsx +2 -2
  123. package/themes/original/src/components/TaxInformation/index.tsx +3 -2
  124. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +7 -2
  125. package/themes/original/src/components/UserDetails/index.tsx +17 -16
  126. package/themes/original/src/components/UserFormDetails/index.tsx +109 -67
  127. package/themes/original/src/components/UserVerification/index.tsx +18 -5
  128. package/themes/original/src/components/VerifyPhone/index.tsx +1 -1
  129. package/themes/original/src/components/shared/OButton.tsx +2 -2
  130. package/themes/original/src/components/shared/OInput.tsx +97 -97
  131. package/themes/original/src/components/shared/OModal.tsx +7 -2
  132. package/themes/original/src/providers/AlertProvider.tsx +1 -1
  133. package/themes/original/src/types/index.tsx +700 -695
  134. package/themes/original/src/utils/index.tsx +50 -34
  135. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
  136. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +0 -62
  137. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +0 -12
  138. package/themes/original/src/components/HelpGuide/index.tsx +0 -68
  139. package/themes/original/src/components/HelpGuide/styles.tsx +0 -12
  140. package/themes/original/src/components/HelpOrder/index.tsx +0 -71
  141. package/themes/original/src/components/HelpOrder/styles.tsx +0 -13
@@ -1,87 +1,90 @@
1
1
  import React from 'react'
2
- import { useTheme } from 'styled-components/native'
3
2
  import { StyleSheet } from 'react-native'
4
- import { SubCategoriesContainer, ContainerButton } from './styles'
5
- import { OButton } from '../../shared'
6
3
  import { useLanguage } from 'ordering-components/native'
4
+ import FIcon from 'react-native-vector-icons/Feather'
5
+ import { SubCategoriesContainer, ContainerButton } from './styles'
6
+ import { OButton, OText } from '../../shared'
7
7
 
8
8
  function SubcategoriesComponentPropsAreEqual(prev: any, next: any) {
9
- return prev.subcategoriesSelected === next.subcategoriesSelected &&
10
- prev.category === next.category
9
+ return prev.subcategoriesSelected === next.subcategoriesSelected &&
10
+ prev.category === next.category
11
11
  }
12
12
 
13
13
  interface SubcategoriesComponentParams {
14
- subcategoriesSelected?: any,
15
- category?: any,
16
- onClickSubcategory: any
14
+ subcategoriesSelected?: any,
15
+ category?: any,
16
+ onClickSubcategory: any
17
17
  }
18
18
 
19
- const SubcategoriesComponent = (props : SubcategoriesComponentParams) => {
20
- const {
21
- subcategoriesSelected,
22
- category,
23
- onClickSubcategory
24
- } = props
19
+ const SubcategoriesComponent = (props: SubcategoriesComponentParams) => {
20
+ const {
21
+ subcategoriesSelected,
22
+ category,
23
+ onClickSubcategory
24
+ } = props
25
25
 
26
- const theme = useTheme()
27
- const [, t] = useLanguage()
28
- const allsubcategorySelected = !subcategoriesSelected?.some((subcategory: any) => category?.id === subcategory?.parent_category_id)
26
+ const [, t] = useLanguage()
27
+ const allsubcategorySelected = !subcategoriesSelected?.some((subcategory: any) => category?.id === subcategory?.parent_category_id)
29
28
 
30
- const bpStyles = StyleSheet.create({
31
- catWrap: { flexDirection: 'row', alignItems: 'center', marginBottom: 19 },
32
- catIcon: {
33
- borderRadius: 7.6,
34
- shadowColor: '#000000',
35
- shadowOpacity: 0.1,
36
- shadowOffset: { width: 0, height: 0 },
37
- shadowRadius: 1,
38
- marginEnd: 13,
39
- },
40
- categoryButtonStyle: {
41
- borderWidth: 0,
42
- marginLeft: 5,
43
- marginRight: 5,
44
- marginBottom: 10,
45
- height: 35,
46
- paddingLeft: 3,
47
- paddingRight: 3,
48
- }
49
- });
29
+ const bpStyles = StyleSheet.create({
30
+ categoryButtonStyle: {
31
+ borderWidth: 0,
32
+ marginRight: 5,
33
+ borderRadius: 8,
34
+ marginBottom: 5,
35
+ height: 35,
36
+ padding: 0,
37
+ paddingLeft: 3,
38
+ paddingRight: 3,
39
+ }
40
+ });
50
41
 
51
42
 
52
- return (
53
- <SubCategoriesContainer>
54
- <ContainerButton
55
- isSelected={allsubcategorySelected}
56
- >
57
- <OButton
58
- onClick={() => onClickSubcategory(null, category)}
59
- bgColor={allsubcategorySelected ? theme.colors.primary : theme.colors.backgroundGray}
60
- text={`${t('ALL', 'All')} ${allsubcategorySelected ? 'X' : ''}`}
61
- style={bpStyles.categoryButtonStyle}
62
- textStyle={{ color: allsubcategorySelected ? theme.colors.white : theme.colors.textNormal, fontSize: 12 }}
63
- />
64
- </ContainerButton>
65
- {category?.subcategories?.map((subcategory: any) => {
66
- const isSubcategorySelected = subcategoriesSelected?.find((_subcategory: any) => _subcategory?.id === subcategory?.id)
67
- return (
68
- <ContainerButton
69
- key={subcategory?.id}
70
- isSelected={isSubcategorySelected}
71
- >
72
- <OButton
73
- onClick={() => onClickSubcategory(subcategory, category)}
74
- bgColor={isSubcategorySelected ? theme.colors.primary : theme.colors.backgroundGray}
75
- text={`${subcategory?.name} ${isSubcategorySelected ? 'X' : ''}`}
76
- style={bpStyles.categoryButtonStyle}
77
- textStyle={{ color: isSubcategorySelected ? theme.colors.white : theme.colors.textNormal, fontSize: 12 }}
78
- />
79
- </ContainerButton>
80
- )
81
- }
82
- )}
83
- </SubCategoriesContainer>
84
- )
43
+ return (
44
+ <SubCategoriesContainer>
45
+ <ContainerButton
46
+ isSelected={allsubcategorySelected}
47
+ >
48
+ <OButton
49
+ onClick={() => onClickSubcategory(null, category)}
50
+ text={
51
+ allsubcategorySelected
52
+ ? <OText color='#FFF'>
53
+ {t('ALL', 'All')}{' '}
54
+ <FIcon name='x-circle' size={16} />
55
+ </OText>
56
+ : t('ALL', 'All')
57
+ }
58
+ style={bpStyles.categoryButtonStyle}
59
+ textStyle={{ fontSize: 12 }}
60
+ />
61
+ </ContainerButton>
62
+ {category?.subcategories?.map((subcategory: any) => {
63
+ const isSubcategorySelected = subcategoriesSelected?.find((_subcategory: any) => _subcategory?.id === subcategory?.id)
64
+ return (
65
+ <ContainerButton
66
+ key={subcategory?.id}
67
+ isSelected={isSubcategorySelected}
68
+ >
69
+ <OButton
70
+ onClick={() => onClickSubcategory(subcategory, category)}
71
+ text={
72
+ isSubcategorySelected
73
+ ? <OText color='#FFF'>
74
+ {subcategory?.name}{' '}
75
+ <FIcon name='x-circle' size={16} />
76
+ </OText>
77
+ : subcategory?.name
78
+ }
79
+ style={bpStyles.categoryButtonStyle}
80
+ textStyle={{ fontSize: 12 }}
81
+ />
82
+ </ContainerButton>
83
+ )
84
+ }
85
+ )}
86
+ </SubCategoriesContainer>
87
+ )
85
88
  }
86
89
 
87
90
  export const SubcategoriesComponentMemoized = React.memo(SubcategoriesComponent, SubcategoriesComponentPropsAreEqual)
@@ -65,11 +65,10 @@ const BusinessProductsListUI = (props: BusinessProductsListParams) => {
65
65
  return
66
66
  }
67
67
  const categoryFounded = subcategoriesSelected.find((_subcategory: any) => subCategory?.id === _subcategory?.id)
68
- if (categoryFounded) {
69
- setSubcategoriesSelected?.(subcategoriesSelected.filter((_subcategory: any) => subCategory?.id !== _subcategory?.id))
70
- } else {
71
- setSubcategoriesSelected?.([...subcategoriesSelected, subCategory])
72
- }
68
+ setSubcategoriesSelected?.(categoryFounded
69
+ ? subcategoriesSelected.filter((_subcategory: any) => subCategory?.id !== _subcategory?.id)
70
+ : [...subcategoriesSelected, subCategory]
71
+ )
73
72
  }
74
73
 
75
74
  return (
@@ -214,11 +213,11 @@ const BusinessProductsListUI = (props: BusinessProductsListParams) => {
214
213
  text={t('VIEW_MORE', 'View more')}
215
214
  parentStyle={{ padding: 0 }}
216
215
  onClick={() => setOpenDescription(category)}
217
- bgColor='transparent'
216
+ bgColor={theme.colors.white}
217
+ borderColor={theme.colors.primary}
218
218
  textStyle={{
219
219
  fontSize: 12,
220
220
  borderBottomWidth: 1,
221
- borderBottomColor: theme.colors.primary,
222
221
  color: theme.colors.primary
223
222
  }}
224
223
  />
@@ -18,15 +18,12 @@ export const RibbonBox = styled.View`
18
18
  background-color: ${(props: any) => props.theme.colors.primary};
19
19
  padding: 2px 8px;
20
20
  max-width: 180px;
21
-
22
21
  ${(props: any) => props.bgColor && css`
23
22
  background-color: ${props.bgColor};
24
23
  `}
25
-
26
24
  ${(props: any) => props.isRoundRect && css`
27
25
  border-radius: 7.6px;
28
26
  `}
29
-
30
27
  ${(props: any) => props.isCapsule && css`
31
28
  border-radius: 50px;
32
29
  `}
@@ -225,8 +225,9 @@ const BusinessProductsListingUI = (props: BusinessProductsListingParams) => {
225
225
  cartUuid: cart?.uuid,
226
226
  businessLogo: cart?.business?.logo,
227
227
  businessName: cart?.business?.name,
228
- cartTotal: cart?.total
229
- }, true)
228
+ cartTotal: cart?.total,
229
+ fromProductsList: true
230
+ })
230
231
  } else {
231
232
  const groupKeys: any = {}
232
233
  cartsAvailable.forEach((_cart: any) => {
@@ -242,12 +243,12 @@ const BusinessProductsListingUI = (props: BusinessProductsListingParams) => {
242
243
  props.onNavigationRedirect('CheckoutNavigator', {
243
244
  screen: 'MultiCheckout',
244
245
  checkCarts: true
245
- }, true)
246
+ })
246
247
  } else {
247
248
  props.onNavigationRedirect('CheckoutNavigator', {
248
249
  screen: 'MultiCheckout',
249
250
  cartUuid: cartsAvailable[0]?.group?.uuid
250
- }, true)
251
+ })
251
252
  }
252
253
  }
253
254
  }
@@ -26,9 +26,9 @@ import { BusinessTypeFilterParams } from '../../types';
26
26
  const windowWidth = Dimensions.get('window').width;
27
27
 
28
28
  export const BusinessTypeFilterUI = (props: BusinessTypeFilterParams) => {
29
- const {
30
- typesState,
31
- currentTypeSelected,
29
+ const {
30
+ typesState,
31
+ currentTypeSelected,
32
32
  handleChangeBusinessType,
33
33
  setBusinessTypes,
34
34
  isAppoint
@@ -38,13 +38,13 @@ export const BusinessTypeFilterUI = (props: BusinessTypeFilterParams) => {
38
38
 
39
39
  const theme = useTheme();
40
40
  const [isOpenAllCategories, setIsOpenAllCategories] = useState(false)
41
- const defaultImage = (name : string) => theme.images?.categories?.[name.toLowerCase().replace(' ', '')]
41
+ const defaultImage = (name: string) => theme.images?.categories?.[name.toLowerCase().replace(' ', '')]
42
42
 
43
43
  useEffect(() => {
44
- if(typesState?.types?.length > 0){
45
- setBusinessTypes && setBusinessTypes(typesState?.types)
44
+ if (typesState?.types?.length > 0) {
45
+ setBusinessTypes && setBusinessTypes(typesState?.types)
46
46
  }
47
- }, [typesState])
47
+ }, [typesState])
48
48
 
49
49
  const handleChangeServiceType = (serviceId: any) => {
50
50
  if (serviceId === currentTypeSelected) {
@@ -119,10 +119,11 @@ export const BusinessTypeFilterUI = (props: BusinessTypeFilterParams) => {
119
119
  <OButton
120
120
  key={i}
121
121
  bgColor={(currentTypeSelected === businessType?.id) ? theme.colors.primary : theme.colors.backgroundGray200}
122
+ borderColor={(currentTypeSelected === businessType?.id) ? theme.colors.primary : theme.colors.backgroundGray200}
122
123
  onClick={() => handleChangeServiceType(businessType?.id)}
123
124
  text={`${businessType?.name} ${(currentTypeSelected === businessType?.id) ? ' X' : ''}`}
124
125
  style={styles.businessType}
125
- textStyle={{ fontSize: 10, color: (currentTypeSelected === businessType?.id) ? theme.colors.backgroundLight : theme.colors.textNormal }}
126
+ textStyle={{ fontSize: 10, color: (currentTypeSelected === businessType?.id) ? theme.colors.white : theme.colors.textNormal }}
126
127
  />
127
128
  ))}
128
129
  </ServiceWrapper>
@@ -392,10 +392,11 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
392
392
  <OButton
393
393
  key={i}
394
394
  bgColor={(priceLevelSelected === price?.level) ? theme.colors.primary : theme.colors.backgroundGray200}
395
+ borderColor={(priceLevelSelected === price?.level) ? theme.colors.primary : theme.colors.backgroundGray200}
395
396
  onClick={() => handleChangePriceLevel(price?.level)}
396
397
  text={`${price.content} ${(priceLevelSelected === price?.level) ? ' X' : ''}`}
397
398
  style={styles.priceLevel}
398
- textStyle={{ fontSize: 10, color: (priceLevelSelected === price?.level) ? theme.colors.backgroundLight : theme.colors.textNormal }}
399
+ textStyle={{ fontSize: 10, color: (priceLevelSelected === price?.level) ? theme.colors.backgroundLight : theme.colors.black }}
399
400
  />
400
401
  ))}
401
402
  </ScrollView>
@@ -60,7 +60,7 @@ export const WrapMomentOption = styled.TouchableOpacity`
60
60
 
61
61
  export const HeaderWrapper = styled.ImageBackground`
62
62
  width: 100%;
63
- height: ${({ bgHeaderHeight } : any) => bgHeaderHeight || '270px'};
63
+ height: ${({ bgHeaderHeight }: any) => bgHeaderHeight || '270px'};
64
64
  padding: 20px;
65
65
  background-color: transparent;
66
66
  `;
@@ -73,6 +73,7 @@ const CartUI = (props: any) => {
73
73
  const [openTaxModal, setOpenTaxModal] = useState<any>({ open: false, data: null, type: '' })
74
74
  const [openPlaceModal, setOpenPlaceModal] = useState(false)
75
75
  const [maxDate, setMaxDate] = useState<any>(null)
76
+ const [comment] = useState<any>(cart?.comment ?? '')
76
77
  const isCartPending = cart?.status === 2
77
78
  const isCouponEnabled = validationFields?.fields?.checkout?.coupon?.enabled
78
79
  const business: any = (orderState?.carts && Object.values(orderState.carts).find((_cart: any) => _cart?.uuid === props.cartuuid)) ?? {}
@@ -83,6 +84,7 @@ const CartUI = (props: any) => {
83
84
  const driverTipsOptions = typeof configs?.driver_tip_options?.value === 'string'
84
85
  ? JSON.parse(configs?.driver_tip_options?.value) || []
85
86
  : configs?.driver_tip_options?.value || []
87
+ const allowDriverTipPickup = configs?.driver_tip_allowed_at_pickup?.value === '1' && orderState?.options?.type === 2
86
88
 
87
89
  const momentFormatted = !orderState?.option?.moment
88
90
  ? t('RIGHT_NOW', 'Right Now')
@@ -114,6 +116,7 @@ const CartUI = (props: any) => {
114
116
  }
115
117
 
116
118
  const handleUpsellingPage = (individualCart: any) => {
119
+ Vibration.vibrate(100)
117
120
  const isProductCartParam = !!individualCart?.products?.length
118
121
  setOpenUpselling(false)
119
122
  setCanOpenUpselling(false)
@@ -128,8 +131,9 @@ const CartUI = (props: any) => {
128
131
  cartUuid: cart?.uuid,
129
132
  businessLogo: cart?.business?.logo,
130
133
  businessName: cart?.business?.name,
131
- cartTotal: cart?.total
132
- }, true)
134
+ cartTotal: cart?.total,
135
+ fromProductsList: isFromUpselling
136
+ })
133
137
  } else {
134
138
  const groupKeys: any = {}
135
139
  cartsAvailable.forEach((_cart: any) => {
@@ -145,28 +149,30 @@ const CartUI = (props: any) => {
145
149
  onNavigationRedirect('CheckoutNavigator', {
146
150
  screen: 'MultiCheckout',
147
151
  checkCarts: true
148
- }, true)
152
+ })
149
153
  } else {
150
154
  onNavigationRedirect('CheckoutNavigator', {
151
155
  screen: 'MultiCheckout',
152
156
  cartUuid: cartsAvailable[0]?.group?.uuid
153
- }, true)
157
+ })
154
158
  }
155
159
  }
156
160
  }
157
161
 
158
- const getIncludedTaxes = () => {
162
+ const getIncludedTaxes = (isDeliveryFee?: boolean) => {
159
163
  if (cart?.taxes === null || !cart?.taxes) {
160
- return cart.business.tax_type === 1 ? cart?.tax : 0
164
+ return cart?.business.tax_type === 1 ? cart?.tax : 0
161
165
  } else {
162
166
  return cart?.taxes.reduce((taxIncluded: number, tax: any) => {
163
- return taxIncluded + (tax.type === 1 ? tax.summary?.tax : 0)
167
+ return taxIncluded +
168
+ (((!isDeliveryFee && tax.type === 1 && tax.target === 'product') ||
169
+ (isDeliveryFee && tax.type === 1 && tax.target === 'delivery_fee')) ? tax.summary?.tax : 0)
164
170
  }, 0)
165
171
  }
166
172
  }
167
173
 
168
174
  const getIncludedTaxesDiscounts = () => {
169
- return cart?.taxes?.filter((tax: any) => tax?.type === 1)?.reduce((carry: number, tax: any) => carry + (tax?.summary?.tax_after_discount ?? tax?.summary?.tax), 0)
175
+ return cart?.taxes?.filter((tax: any) => (tax?.type === 1 && tax?.target === 'product'))?.reduce((carry: number, tax: any) => carry + (tax?.summary?.tax_after_discount ?? tax?.summary?.tax), 0)
170
176
  }
171
177
 
172
178
  const OfferAlert = ({ offerId }: any) => {
@@ -328,7 +334,7 @@ const CartUI = (props: any) => {
328
334
  </OSTable>
329
335
  )}
330
336
  {
331
- cart.taxes?.length > 0 && cart.taxes.filter((tax: any) => tax.type === 2 && tax?.rate !== 0).map((tax: any, i: number) => (
337
+ cart.taxes?.length > 0 && cart.taxes.filter((tax: any) => tax.type === 2 && tax?.rate !== 0 && tax?.target === 'product').map((tax: any, i: number) => (
332
338
  <OSTable key={`${tax.id}_${i}`}>
333
339
  <OSRow>
334
340
  <OText size={12} lineHeight={18} numberOfLines={1} >
@@ -383,9 +389,25 @@ const CartUI = (props: any) => {
383
389
  {orderState?.options?.type === 1 && cart?.delivery_price_with_discount > 0 && !hideDeliveryFee && (
384
390
  <OSTable>
385
391
  <OText size={12} lineHeight={18}>{t('DELIVERY_FEE', 'Delivery Fee')}</OText>
386
- <OText size={12} lineHeight={18}>{parsePrice(cart?.delivery_price_with_discount)}</OText>
392
+ <OText size={12} lineHeight={18}>{parsePrice(cart?.delivery_price_with_discount + getIncludedTaxes(true))}</OText>
387
393
  </OSTable>
388
394
  )}
395
+ {
396
+ cart?.taxes?.length > 0 && cart?.taxes?.filter((tax: any) => tax?.type === 2 && tax?.rate !== 0 && tax?.target === 'delivery_fee').map((tax: any, i: number) => (
397
+ <OSTable key={`${tax.description}_${i}`}>
398
+ <OSRow>
399
+ <OText size={12} lineHeight={18} numberOfLines={1}>
400
+ {tax.name || t('INHERIT_FROM_BUSINESS', 'Inherit from business')}
401
+ {`(${verifyDecimals(tax?.rate, parseNumber)}%)`}
402
+ </OText>
403
+ <TouchableOpacity onPress={() => setOpenTaxModal({ open: true, data: tax, type: 'tax' })}>
404
+ <AntIcon name='infocirlceo' size={16} color={theme.colors.primary} />
405
+ </TouchableOpacity>
406
+ </OSRow>
407
+ <OText size={12} lineHeight={18}>{parsePrice(tax?.summary?.tax_after_discount ?? tax?.summary?.tax ?? 0)}</OText>
408
+ </OSTable>
409
+ ))
410
+ }
389
411
  {
390
412
  cart?.offers?.length > 0 && cart?.offers?.filter((offer: any) => offer?.target === 2)?.map((offer: any, i: number) => (
391
413
  <OSTable key={`${offer.id}_${i}`}>
@@ -444,7 +466,7 @@ const CartUI = (props: any) => {
444
466
  {!isMultiCheckout &&
445
467
  cart &&
446
468
  cart?.valid &&
447
- orderState?.options?.type === 1 &&
469
+ (orderState?.options?.type === 1 || allowDriverTipPickup) &&
448
470
  cart?.status !== 2 &&
449
471
  validationFields?.fields?.checkout?.driver_tip?.enabled &&
450
472
  driverTipsOptions && driverTipsOptions?.length > 0 &&
@@ -503,7 +525,7 @@ const CartUI = (props: any) => {
503
525
  <OText size={16} lineHeight={18}>{t('COMMENTS', 'Comments')}</OText>
504
526
  <View style={{ flex: 1, width: '100%' }}>
505
527
  <OInput
506
- value={cart?.comment}
528
+ value={comment || cart?.comment}
507
529
  placeholder={t('SPECIAL_COMMENTS', 'Special Comments')}
508
530
  onChange={(value: string) => handleChangeComment(value)}
509
531
  style={{
@@ -548,6 +570,14 @@ const CartUI = (props: any) => {
548
570
  />
549
571
  </View>
550
572
  )}
573
+ {!cart?.valid_address && cart?.status !== 2 && (
574
+ <OText
575
+ color={theme.colors.error}
576
+ size={12}
577
+ >
578
+ {t('INVALID_CART_ADDRESS', 'Selected address is invalid, please select a closer address.')}
579
+ </OText>
580
+ )}
551
581
  {(!isMultiCheckout || !cart?.business_id) && (
552
582
  <>
553
583
  {cart?.valid_products ? (
@@ -561,6 +591,7 @@ const CartUI = (props: any) => {
561
591
  `${t('MINIMUN_SUBTOTAL_ORDER', 'Minimum subtotal order:')} ${parsePrice(cart?.minimum)}`
562
592
  )}
563
593
  bgColor={(subtotalWithTaxes < cart?.minimum || !cart?.valid_address) ? theme.colors.secundary : theme.colors.primary}
594
+ borderColor={(subtotalWithTaxes < cart?.minimum || !cart?.valid_address) ? theme.colors.secundary : theme.colors.primary}
564
595
  isDisabled={(openUpselling && !canOpenUpselling) || subtotalWithTaxes < cart?.minimum || !cart?.valid_address}
565
596
  imgRightSrc={null}
566
597
  textStyle={{ textAlign: 'center', flex: 1 }}
@@ -620,6 +651,7 @@ const CartUI = (props: any) => {
620
651
  export const Cart = (props: any) => {
621
652
  const cartProps = {
622
653
  ...props,
654
+ disablePreviousComment: true,
623
655
  UIComponent: CartUI
624
656
  }
625
657
 
@@ -174,9 +174,7 @@ export const CartContent = (props: any) => {
174
174
  <CheckoutAction style={{ marginTop: 0 }}>
175
175
  <OButton
176
176
  text={t('CHECKOUT', 'Checkout')}
177
- bgColor={!cartsAvailable.length ? theme.colors.secundary : theme.colors.primary}
178
177
  isDisabled={!cartsAvailable.length}
179
- borderColor={!cartsAvailable.length ? theme.colors.secundary : theme.colors.primary}
180
178
  imgRightSrc={null}
181
179
  onClick={() => handleCheckoutRedirect()}
182
180
  style={{ width: '100%', flexDirection: 'row', justifyContent: 'center', borderRadius: 7.6, shadowOpacity: 0 }}