ordering-ui-react-native 0.16.37 → 0.16.38-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 (202) hide show
  1. package/package.json +7 -5
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/ActiveOrders/index.tsx +61 -63
  4. package/src/components/ActiveOrders/styles.tsx +8 -14
  5. package/src/components/BusinessBasicInformation/index.tsx +11 -19
  6. package/src/components/BusinessInformation/index.tsx +33 -4
  7. package/src/components/BusinessInformation/styles.tsx +2 -2
  8. package/src/components/BusinessProductsList/index.tsx +10 -10
  9. package/src/components/BusinessesListing/index.tsx +1 -1
  10. package/src/components/Checkout/index.tsx +2 -1
  11. package/src/components/LanguageSelector/index.tsx +21 -16
  12. package/src/components/LoginForm/index.tsx +15 -0
  13. package/src/components/Messages/index.tsx +2 -2
  14. package/src/components/NotificationSetting/index.tsx +85 -0
  15. package/src/components/OrderDetails/index.tsx +2 -20
  16. package/src/components/OrdersOption/index.tsx +54 -56
  17. package/src/components/PaymentOptions/index.tsx +335 -365
  18. package/src/components/PaymentOptionsWebView/index.tsx +120 -121
  19. package/src/components/ReviewDriver/index.tsx +1 -1
  20. package/src/components/ReviewOrder/index.tsx +2 -1
  21. package/src/components/ReviewProducts/index.tsx +11 -0
  22. package/src/components/SignupForm/index.tsx +15 -0
  23. package/src/components/SingleProductReview/index.tsx +8 -5
  24. package/src/components/StripeElementsForm/index.tsx +25 -16
  25. package/src/components/VerifyPhone/styles.tsx +1 -2
  26. package/src/components/shared/OBottomPopup.tsx +6 -2
  27. package/src/index.tsx +2 -0
  28. package/src/pages/BusinessesListing.tsx +7 -6
  29. package/src/pages/OrderDetails.tsx +1 -1
  30. package/src/pages/ReviewDriver.tsx +2 -2
  31. package/src/pages/ReviewOrder.tsx +2 -2
  32. package/src/types/@fatnlazycat/react-native-recaptcha-v3/index.d.ts +1 -0
  33. package/src/utils/index.tsx +2 -1
  34. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  35. package/themes/business/src/components/Chat/index.tsx +38 -30
  36. package/themes/business/src/components/DriverMap/index.tsx +7 -5
  37. package/themes/business/src/components/DriverSchedule/index.tsx +36 -19
  38. package/themes/business/src/components/LoginForm/index.tsx +111 -74
  39. package/themes/business/src/components/MapView/index.tsx +12 -1
  40. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  41. package/themes/business/src/components/NewOrderNotification/index.tsx +26 -41
  42. package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
  43. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +25 -19
  44. package/themes/business/src/components/OrdersListManager/index.tsx +10 -3
  45. package/themes/business/src/components/OrdersOption/index.tsx +65 -21
  46. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  47. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  48. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  49. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  50. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  51. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  52. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  53. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  54. package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
  55. package/themes/business/src/components/PreviousOrders/index.tsx +22 -24
  56. package/themes/business/src/components/ProductItemAccordion/index.tsx +3 -2
  57. package/themes/business/src/components/ReviewCustomer/index.tsx +27 -13
  58. package/themes/business/src/components/ScheduleBlocked/index.tsx +2 -2
  59. package/themes/business/src/components/UserFormDetails/index.tsx +5 -2
  60. package/themes/business/src/components/UserProfileForm/index.tsx +2 -0
  61. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  62. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  63. package/themes/business/src/types/index.tsx +15 -9
  64. package/themes/business/src/utils/index.tsx +10 -0
  65. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  66. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  67. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  68. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  69. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  70. package/themes/kiosk/src/components/LoginForm/index.tsx +121 -10
  71. package/themes/kiosk/src/components/LoginForm/styles.tsx +5 -0
  72. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  73. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  74. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  75. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  76. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  77. package/themes/kiosk/src/types/index.d.ts +2 -0
  78. package/themes/original/index.tsx +4 -0
  79. package/themes/original/src/components/AddressDetails/index.tsx +10 -8
  80. package/themes/original/src/components/AddressForm/index.tsx +157 -140
  81. package/themes/original/src/components/AddressList/index.tsx +1 -1
  82. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  83. package/themes/original/src/components/BusinessBasicInformation/index.tsx +324 -162
  84. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +6 -2
  85. package/themes/original/src/components/BusinessController/index.tsx +216 -113
  86. package/themes/original/src/components/BusinessController/styles.tsx +1 -8
  87. package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -6
  88. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  89. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  90. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  91. package/themes/original/src/components/BusinessListingSearch/index.tsx +109 -139
  92. package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
  93. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  94. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  95. package/themes/original/src/components/BusinessProductsList/index.tsx +49 -52
  96. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  97. package/themes/original/src/components/BusinessProductsListing/index.tsx +179 -104
  98. package/themes/original/src/components/BusinessProductsListing/styles.tsx +18 -11
  99. package/themes/original/src/components/BusinessReviews/index.tsx +6 -1
  100. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
  101. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +37 -25
  102. package/themes/original/src/components/BusinessesListing/Layout/Appointment/styles.tsx +5 -4
  103. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +279 -104
  104. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +47 -10
  105. package/themes/original/src/components/BusinessesListing/index.tsx +95 -7
  106. package/themes/original/src/components/Cart/index.tsx +54 -16
  107. package/themes/original/src/components/Cart/styles.tsx +4 -0
  108. package/themes/original/src/components/CartContent/index.tsx +22 -16
  109. package/themes/original/src/components/Checkout/index.tsx +110 -116
  110. package/themes/original/src/components/Checkout/styles.tsx +4 -3
  111. package/themes/original/src/components/DriverTips/index.tsx +4 -4
  112. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  113. package/themes/original/src/components/Favorite/index.tsx +1 -0
  114. package/themes/original/src/components/FavoriteList/index.tsx +32 -2
  115. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  116. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  117. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  118. package/themes/original/src/components/GoogleMap/index.tsx +20 -12
  119. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +25 -10
  120. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +4 -0
  121. package/themes/original/src/components/HelpGuide/index.tsx +9 -8
  122. package/themes/original/src/components/HelpOrder/index.tsx +9 -8
  123. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  124. package/themes/original/src/components/LoginForm/Otp/index.tsx +95 -73
  125. package/themes/original/src/components/LoginForm/index.tsx +98 -41
  126. package/themes/original/src/components/LottieAnimation/index.tsx +69 -0
  127. package/themes/original/src/components/Messages/index.tsx +17 -17
  128. package/themes/original/src/components/MomentOption/index.tsx +8 -6
  129. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -92
  130. package/themes/original/src/components/MultiCheckout/index.tsx +6 -0
  131. package/themes/original/src/components/MultiOrdersDetails/index.tsx +20 -16
  132. package/themes/original/src/components/MyOrders/index.tsx +88 -22
  133. package/themes/original/src/components/NavBar/index.tsx +15 -9
  134. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  135. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  136. package/themes/original/src/components/Notifications/index.tsx +148 -0
  137. package/themes/original/src/components/Notifications/styles.tsx +17 -0
  138. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +167 -0
  139. package/themes/original/src/components/OrderDetails/index.tsx +200 -37
  140. package/themes/original/src/components/OrderDetails/styles.tsx +15 -2
  141. package/themes/original/src/components/OrderItAgain/index.tsx +75 -0
  142. package/themes/original/src/components/OrderItAgain/styles.tsx +10 -0
  143. package/themes/original/src/components/OrderProgress/index.tsx +77 -66
  144. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  145. package/themes/original/src/components/OrderSummary/index.tsx +3 -36
  146. package/themes/original/src/components/OrderTypeSelector/index.tsx +85 -36
  147. package/themes/original/src/components/OrderTypeSelector/styles.tsx +19 -1
  148. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +97 -106
  149. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  150. package/themes/original/src/components/OrdersOption/index.tsx +71 -55
  151. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  152. package/themes/original/src/components/PaymentOptions/index.tsx +41 -23
  153. package/themes/original/src/components/PhoneInputNumber/index.tsx +5 -11
  154. package/themes/original/src/components/PlaceSpot/index.tsx +243 -47
  155. package/themes/original/src/components/PlaceSpot/styles.tsx +0 -2
  156. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  157. package/themes/original/src/components/ProductForm/index.tsx +635 -664
  158. package/themes/original/src/components/ProductForm/styles.tsx +10 -11
  159. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  160. package/themes/original/src/components/ProductOption/index.tsx +1 -1
  161. package/themes/original/src/components/ProductOptionSubOption/index.tsx +16 -8
  162. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +0 -1
  163. package/themes/original/src/components/ProfessionalFilter/index.tsx +2 -1
  164. package/themes/original/src/components/ProfessionalProfile/index.tsx +26 -14
  165. package/themes/original/src/components/Promotions/index.tsx +232 -219
  166. package/themes/original/src/components/Promotions/styles.tsx +7 -2
  167. package/themes/original/src/components/ReviewDriver/index.tsx +7 -7
  168. package/themes/original/src/components/ReviewOrder/index.tsx +18 -3
  169. package/themes/original/src/components/ReviewProducts/index.tsx +2 -2
  170. package/themes/original/src/components/ReviewTrigger/index.tsx +118 -0
  171. package/themes/original/src/components/ReviewTrigger/styles.tsx +34 -0
  172. package/themes/original/src/components/SearchBar/index.tsx +5 -3
  173. package/themes/original/src/components/ServiceForm/index.tsx +410 -258
  174. package/themes/original/src/components/SignupForm/index.tsx +184 -127
  175. package/themes/original/src/components/SingleOrderCard/index.tsx +229 -181
  176. package/themes/original/src/components/SingleOrderCard/styles.tsx +0 -7
  177. package/themes/original/src/components/SingleProductCard/index.tsx +198 -112
  178. package/themes/original/src/components/SingleProductCard/styles.tsx +3 -10
  179. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  180. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  181. package/themes/original/src/components/StripeElementsForm/index.tsx +18 -7
  182. package/themes/original/src/components/UpsellingProducts/index.tsx +15 -5
  183. package/themes/original/src/components/UserDetails/index.tsx +5 -3
  184. package/themes/original/src/components/UserFormDetails/index.tsx +6 -48
  185. package/themes/original/src/components/UserProfile/index.tsx +56 -31
  186. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  187. package/themes/original/src/components/UserProfileForm/index.tsx +10 -10
  188. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  189. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  190. package/themes/original/src/components/Wallets/index.tsx +176 -164
  191. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  192. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  193. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  194. package/themes/original/src/components/shared/OBottomPopup.tsx +48 -15
  195. package/themes/original/src/components/shared/OButton.tsx +10 -3
  196. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  197. package/themes/original/src/components/shared/OInput.tsx +13 -3
  198. package/themes/original/src/layouts/Container.tsx +13 -9
  199. package/themes/original/src/layouts/FloatingBottomContainer.tsx +5 -1
  200. package/themes/original/src/types/index.tsx +82 -29
  201. package/themes/original/src/utils/index.tsx +121 -10
  202. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,15 +1,17 @@
1
1
  import React, { useState } from 'react'
2
2
  import { PromotionsController, useLanguage, useUtils } from 'ordering-components/native'
3
+ import FastImage from 'react-native-fast-image'
3
4
  import {
4
- PromotionsContainer,
5
- SingleOfferContainer,
6
- OfferInformation,
7
- SearchBarContainer,
8
- SingleBusinessOffer,
9
- AvailableBusinesses,
10
- OfferData,
11
- Code,
12
- BusinessInfo
5
+ PromotionsContainer,
6
+ SingleOfferContainer,
7
+ OfferInformation,
8
+ SearchBarContainer,
9
+ SingleBusinessOffer,
10
+ AvailableBusinesses,
11
+ OfferData,
12
+ Code,
13
+ BusinessInfo,
14
+ WrapperSingleOffer
13
15
  } from './styles'
14
16
  import { SearchBar } from '../SearchBar'
15
17
  import NavBar from '../NavBar'
@@ -18,233 +20,244 @@ import { OButton, OIcon, OModal, OText } from '../shared'
18
20
  import { Placeholder, PlaceholderLine } from 'rn-placeholder'
19
21
  import { NotFoundSource } from '../NotFoundSource'
20
22
  import { View, StyleSheet, ScrollView, Platform, RefreshControl } from 'react-native'
21
- import FastImage from 'react-native-fast-image'
22
23
  import { PromotionParams } from '../../types'
23
24
  import { Container } from '../../layouts/Container'
24
25
 
25
26
  const PromotionsUI = (props: PromotionParams) => {
26
- const {
27
- navigation,
28
- offersState,
29
- handleSearchValue,
30
- searchValue,
31
- loadOffers,
32
- offerSelected,
33
- setOfferSelected
34
- } = props
27
+ const {
28
+ navigation,
29
+ offersState,
30
+ handleSearchValue,
31
+ searchValue,
32
+ loadOffers,
33
+ offerSelected,
34
+ setOfferSelected
35
+ } = props
35
36
 
36
- const theme = useTheme();
37
+ const theme = useTheme();
37
38
 
38
- const styles = StyleSheet.create({
39
- productStyle: {
40
- width: 75,
41
- height: 75,
42
- borderRadius: 7.6
43
- },
44
- buttonStyle: {
45
- width: 55,
46
- height: 25,
47
- paddingLeft: 0,
48
- paddingRight: 0
49
- },
50
- offerTitle: {
51
- fontSize: 12
52
- },
53
- offerDescription: {
54
- color: '#909BA9',
55
- fontSize: 10
56
- },
57
- offerExtraInfo: {
58
- fontSize: 10
59
- },
60
- modalButtonStyle: {
61
- width: 100,
62
- height: 35,
63
- paddingLeft: 0,
64
- paddingRight: 0,
65
- borderRadius: 7.6
66
- }
67
- });
39
+ const styles = StyleSheet.create({
40
+ productStyle: {
41
+ width: 75,
42
+ height: 75,
43
+ borderRadius: 7.6
44
+ },
45
+ buttonStyle: {
46
+ width: '100%',
47
+ height: 35,
48
+ paddingLeft: 0,
49
+ paddingRight: 0,
50
+ borderRadius: 8
51
+ },
52
+ offerTitle: {
53
+ fontSize: 14
54
+ },
55
+ offerDescription: {
56
+ color: '#909BA9',
57
+ fontSize: 12
58
+ },
59
+ offerExtraInfo: {
60
+ fontSize: 12
61
+ },
62
+ modalButtonStyle: {
63
+ width: 100,
64
+ height: 35,
65
+ paddingLeft: 0,
66
+ paddingRight: 0,
67
+ borderRadius: 7.6
68
+ }
69
+ });
68
70
 
69
- const [, t] = useLanguage()
70
- const [{ parseDate, parsePrice, optimizeImage }] = useUtils()
71
- const [openModal, setOpenModal] = useState(false)
72
- const [refreshing] = useState(false);
71
+ const [, t] = useLanguage()
72
+ const [{ parseDate, parsePrice, optimizeImage }] = useUtils()
73
+ const [openModal, setOpenModal] = useState(false)
74
+ const [refreshing] = useState(false);
73
75
 
74
- const handleClickOffer = (offer: any) => {
75
- setOpenModal(true)
76
- setOfferSelected(offer)
77
- }
76
+ const handleClickOffer = (offer: any) => {
77
+ setOpenModal(true)
78
+ setOfferSelected(offer)
79
+ }
78
80
 
79
- const handleBusinessClick = (store: any) => {
80
- setOpenModal(false)
81
- navigation.navigate('Business', { store: store.slug })
82
- }
81
+ const handleBusinessClick = (store: any) => {
82
+ setOpenModal(false)
83
+ navigation.navigate('Business', { store: store.slug })
84
+ }
83
85
 
84
- const handleOnRefresh = () => {
85
- if (!offersState.loading) {
86
- loadOffers();
87
- }
86
+ const handleOnRefresh = () => {
87
+ if (!offersState.loading) {
88
+ loadOffers();
88
89
  }
90
+ }
89
91
 
90
- const filteredOffers = offersState?.offers?.filter((offer: any) => offer.name.toLowerCase().includes(searchValue.toLowerCase()))
91
- const targetString = offerSelected?.target === 1
92
- ? t('SUBTOTAL', 'Subtotal')
93
- : offerSelected?.target === 2
94
- ? t('DELIVERY_FEE', 'Delivery fee')
95
- : t('SERVICE_FEE', 'Service fee')
92
+ const filteredOffers = offersState?.offers?.filter((offer: any) => offer.name.toLowerCase().includes(searchValue.toLowerCase()))
93
+ const targetString = offerSelected?.target === 1
94
+ ? t('SUBTOTAL', 'Subtotal')
95
+ : offerSelected?.target === 2
96
+ ? t('DELIVERY_FEE', 'Delivery fee')
97
+ : t('SERVICE_FEE', 'Service fee')
96
98
 
97
- return (
98
- <Container
99
- noPadding
100
- refreshControl={
101
- <RefreshControl
102
- refreshing={refreshing}
103
- onRefresh={() => handleOnRefresh()}
99
+ return (
100
+ <Container
101
+ noPadding
102
+ refreshControl={
103
+ <RefreshControl
104
+ refreshing={refreshing}
105
+ onRefresh={() => handleOnRefresh()}
106
+ />
107
+ }
108
+ >
109
+ <NavBar
110
+ title={t('PROMOTIONS', 'Promotions')}
111
+ titleAlign={'center'}
112
+ onActionLeft={() => navigation.goBack()}
113
+ showCall={false}
114
+ style={{ paddingVertical: Platform.OS === 'ios' ? 0 : 20, marginLeft: 20 }}
115
+ />
116
+ <PromotionsContainer>
117
+ <SearchBarContainer>
118
+ <SearchBar
119
+ placeholder={t('SEARCH_OFFERS', 'Search offers')}
120
+ onSearch={handleSearchValue}
121
+ />
122
+ </SearchBarContainer>
123
+
124
+ {offersState?.loading && (
125
+ <>
126
+ {[...Array(5).keys()].map((key, i) => (
127
+ <Placeholder key={i} style={{ flexDirection: 'row', marginBottom: 20 }}>
128
+ <PlaceholderLine height={10} width={45} />
129
+ <PlaceholderLine height={10} width={60} />
130
+ <PlaceholderLine height={10} width={75} />
131
+ </Placeholder>
132
+ ))}
133
+ </>
134
+ )}
135
+ {((!offersState?.loading && filteredOffers?.length === 0) || offersState?.error) && (
136
+ <NotFoundSource
137
+ content={offersState?.error || t('NOT_FOUND_OFFERS', 'Not found offers')}
138
+ />
139
+ )}
140
+ <ScrollView>
141
+ {!offersState?.loading && offersState.offers?.length > 0 && filteredOffers?.map((offer: any) => (
142
+ <WrapperSingleOffer key={offer.id}>
143
+ <SingleOfferContainer>
144
+ <FastImage
145
+ style={{ height: 80, width: 80, aspectRatio: 3 / 2, borderRadius: 8 }}
146
+ source={typeof offer?.image !== 'number' ? {
147
+ uri: optimizeImage(offer?.image, 'h_1024,c_limit'),
148
+ priority: FastImage.priority.normal,
149
+ } : theme.images?.dummies?.businessLogo}
104
150
  />
105
- }
151
+ <OfferInformation>
152
+ <OText style={styles.offerTitle} numberOfLines={2}>{offer?.name}</OText>
153
+ {!!offer?.description && (
154
+ <OText style={styles.offerDescription} numberOfLines={2}>{offer?.description}</OText>
155
+ )}
156
+ <OText style={styles.offerExtraInfo}>
157
+ {t('EXPIRES', 'Expires')} {parseDate(offer?.end, { outputFormat: 'MMM DD, YYYY' })}
158
+ </OText>
159
+ <AvailableBusinesses>
160
+ <OText style={styles.offerExtraInfo} numberOfLines={1}>
161
+ {t('APPLY_FOR', 'Apply for')}:
162
+ {offer.businesses.map((business: any, i: number) => (
163
+ <React.Fragment key={i}>{' '}{business?.name}{i + 1 < offer.businesses?.length ? ',' : ''}</React.Fragment>
164
+ ))}
165
+ </OText>
166
+ </AvailableBusinesses>
167
+ </OfferInformation>
168
+ </SingleOfferContainer>
169
+ <OButton
170
+ onClick={() => handleClickOffer(offer)}
171
+ text={t('VIEW', 'View')}
172
+ style={styles.buttonStyle}
173
+ textStyle={{ fontSize: 14, color: '#fff', flexWrap: 'nowrap' }}
174
+ />
175
+ </WrapperSingleOffer>
176
+ ))}
177
+ </ScrollView>
178
+ <OModal
179
+ open={openModal}
180
+ entireModal
181
+ title={``}
182
+ onClose={() => setOpenModal(false)}
106
183
  >
107
- <NavBar
108
- title={t('PROMOTIONS', 'Promotions')}
109
- titleAlign={'center'}
110
- onActionLeft={() => navigation.goBack()}
111
- showCall={false}
112
- style={{ paddingVertical: Platform.OS === 'ios' ? 0 : 20, marginLeft: 20 }}
113
- />
114
- <PromotionsContainer>
115
- <SearchBarContainer>
116
- <SearchBar
117
- placeholder={t('SEARCH_OFFERS', 'Search offers')}
118
- onSearch={handleSearchValue}
119
- />
120
- </SearchBarContainer>
121
-
122
- {offersState?.loading && (
123
- <>
124
- {[...Array(5).keys()].map((key, i) => (
125
- <Placeholder key={i} style={{ flexDirection: 'row', marginBottom: 20 }}>
126
- <PlaceholderLine height={10} width={45} />
127
- <PlaceholderLine height={10} width={60} />
128
- <PlaceholderLine height={10} width={75} />
129
- </Placeholder>
130
- ))}
131
- </>
132
- )}
133
- {((!offersState?.loading && filteredOffers?.length === 0) || offersState?.error) && (
134
- <NotFoundSource
135
- content={offersState?.error || t('NOT_FOUND_OFFERS', 'Not found offers')}
136
- />
137
- )}
138
- <ScrollView>
139
- {!offersState?.loading && offersState.offers?.length > 0 && filteredOffers?.map((offer: any) => (
140
- <SingleOfferContainer key={offer.id}>
141
- <OfferInformation>
142
- <OText style={styles.offerTitle} numberOfLines={2}>{offer?.name}</OText>
143
- {!!offer?.description && (
144
- <OText style={styles.offerDescription} numberOfLines={2}>{offer?.description}</OText>
145
- )}
146
- <OText style={styles.offerExtraInfo}>
147
- {t('EXPIRES', 'Expires')} {parseDate(offer?.end, { outputFormat: 'MMM DD, YYYY' })}
148
- </OText>
149
- <AvailableBusinesses>
150
- <OText style={styles.offerExtraInfo} numberOfLines={1}>
151
- {t('APPLY_FOR', 'Apply for')}:
152
- {offer.businesses.map((business: any, i: number) => (
153
- <React.Fragment key={i}>{' '}{business?.name}{i + 1 < offer.businesses?.length ? ',' : ''}</React.Fragment>
154
- ))}
155
- </OText>
156
- </AvailableBusinesses>
157
- </OfferInformation>
158
- <OButton
159
- onClick={() => handleClickOffer(offer)}
160
- text={t('VIEW', 'View')}
161
- style={styles.buttonStyle}
162
- textStyle={{ fontSize: 10, color: '#fff', flexWrap: 'nowrap' }}
163
- />
164
- </SingleOfferContainer>
165
- ))}
166
- </ScrollView>
167
- <OModal
168
- open={openModal}
169
- onClose={() => setOpenModal(false)}
170
- entireModal
171
-
172
- title={``}
173
- >
174
- <View style={{ padding: 20 }}>
175
- <OText style={{ alignSelf: 'center', fontWeight: '700' }} mBottom={20}>
176
- {offerSelected?.name} / {t('VALUE_OF_OFFER', 'Value of offer')}: {offerSelected?.rate_type === 1 ? `${offerSelected?.rate}%` : `${parsePrice(offerSelected?.rate)}`}
177
- </OText>
178
- <OfferData>
179
- {offerSelected?.type === 2 && (
180
- <Code>
181
- <OText>{t('YOUR_CODE', 'Your code')}</OText>
182
- <OText color={theme.colors.primary}>{offerSelected.coupon}</OText>
183
- </Code>
184
- )}
185
- <OText>{t('APPLIES_TO', 'Applies to')}: {targetString}</OText>
186
- {offerSelected?.auto && (
187
- <OText>{t('OFFER_AUTOMATIC', 'This offer applies automatic')}</OText>
188
- )}
189
- {!!offerSelected?.minimum && (
190
- <OText>{t('MINIMUM_PURCHASE_FOR_OFFER', 'Minimum purchase for use this offer')}: {parsePrice(offerSelected?.minimum)}</OText>
191
- )}
192
- {!!offerSelected?.max_discount && (
193
- <OText>{t('MAX_DISCOUNT_ALLOWED', 'Max discount allowed')}: {parsePrice(offerSelected?.max_discount)}</OText>
194
- )}
195
- {!!offerSelected?.description && (
196
- <OText>{offerSelected?.description}</OText>
197
- )}
198
- </OfferData>
199
- <OText style={{ marginTop: 10, marginBottom: 10 }}>
200
- {t('AVAILABLE_BUSINESSES_FOR_OFFER', 'Available businesses for this offer')}:
201
- </OText>
202
- <ScrollView style={{ height: '75%' }}>
203
- {offerSelected?.businesses?.map((business: any) => {
204
- return (
205
- <SingleBusinessOffer key={business.id}>
206
- {business?.logo ? (
207
- <FastImage
208
- style={styles.productStyle}
209
- source={{
210
- uri: optimizeImage(business?.logo, 'h_250,c_limit'),
211
- priority: FastImage.priority.normal,
212
- }}
213
- resizeMode={FastImage.resizeMode.cover}
214
- />
215
- ) : (
216
- <OIcon
217
- src={theme?.images?.dummies?.product}
218
- style={styles.productStyle}
219
- />
220
- )}
221
- <BusinessInfo>
222
- <OText style={{ maxWidth: '60%' }}>{business.name}</OText>
223
- <OButton
224
- onClick={() => handleBusinessClick(business)}
225
- text={t('GO_TO_BUSINESSS', 'Go to business')}
226
- style={styles.modalButtonStyle}
227
- textStyle={{ fontSize: 10, color: '#fff' }}
228
- />
229
- </BusinessInfo>
230
- </SingleBusinessOffer>
231
- )
232
- })}
233
- </ScrollView>
234
- </View>
235
- </OModal>
236
- </PromotionsContainer>
237
- </Container>
238
- )
184
+ <View style={{ padding: 20 }}>
185
+ <OText style={{ alignSelf: 'center', fontWeight: '700' }} mBottom={20}>
186
+ {offerSelected?.name} / {t('VALUE_OF_OFFER', 'Value of offer')}: {offerSelected?.rate_type === 1 ? `${offerSelected?.rate}%` : `${parsePrice(offerSelected?.rate)}`}
187
+ </OText>
188
+ <OfferData>
189
+ {offerSelected?.type === 2 && (
190
+ <Code>
191
+ <OText>{t('YOUR_CODE', 'Your code')}</OText>
192
+ <OText color={theme.colors.primary}>{offerSelected.coupon}</OText>
193
+ </Code>
194
+ )}
195
+ <OText>{t('APPLIES_TO', 'Applies to')}: {targetString}</OText>
196
+ {offerSelected?.auto && (
197
+ <OText>{t('OFFER_AUTOMATIC', 'This offer applies automatic')}</OText>
198
+ )}
199
+ {!!offerSelected?.minimum && (
200
+ <OText>{t('MINIMUM_PURCHASE_FOR_OFFER', 'Minimum purchase for use this offer')}: {parsePrice(offerSelected?.minimum)}</OText>
201
+ )}
202
+ {!!offerSelected?.max_discount && (
203
+ <OText>{t('MAX_DISCOUNT_ALLOWED', 'Max discount allowed')}: {parsePrice(offerSelected?.max_discount)}</OText>
204
+ )}
205
+ {!!offerSelected?.description && (
206
+ <OText>{offerSelected?.description}</OText>
207
+ )}
208
+ </OfferData>
209
+ <OText style={{ marginTop: 10, marginBottom: 10 }}>
210
+ {t('AVAILABLE_BUSINESSES_FOR_OFFER', 'Available businesses for this offer')}:
211
+ </OText>
212
+ <ScrollView
213
+ showsVerticalScrollIndicator={false}
214
+ style={{ height: '75%' }}
215
+ >
216
+ {offerSelected?.businesses?.map((business: any) => {
217
+ return (
218
+ <SingleBusinessOffer key={business.id}>
219
+ {business?.logo ? (
220
+ <FastImage
221
+ style={styles.productStyle}
222
+ source={{
223
+ uri: optimizeImage(business?.logo, 'h_250,c_limit'),
224
+ priority: FastImage.priority.normal,
225
+ }}
226
+ resizeMode={FastImage.resizeMode.cover}
227
+ />
228
+ ) : (
229
+ <OIcon
230
+ src={theme?.images?.dummies?.product}
231
+ style={styles.productStyle}
232
+ />
233
+ )}
234
+ <BusinessInfo>
235
+ <OText style={{ maxWidth: '60%' }}>{business.name}</OText>
236
+ <OButton
237
+ onClick={() => handleBusinessClick(business)}
238
+ text={t('GO_TO_BUSINESSS', 'Go to business')}
239
+ style={styles.modalButtonStyle}
240
+ textStyle={{ fontSize: 10, color: '#fff' }}
241
+ />
242
+ </BusinessInfo>
243
+ </SingleBusinessOffer>
244
+ )
245
+ })}
246
+ </ScrollView>
247
+ </View>
248
+ </OModal>
249
+ </PromotionsContainer>
250
+ </Container>
251
+ )
239
252
  }
240
253
 
241
254
  export const Promotions = (props: PromotionParams) => {
242
- const PromotionsProps = {
243
- ...props,
244
- UIComponent: PromotionsUI
245
- }
255
+ const PromotionsProps = {
256
+ ...props,
257
+ UIComponent: PromotionsUI
258
+ }
246
259
 
247
- return (
248
- <PromotionsController {...PromotionsProps} />
249
- )
260
+ return (
261
+ <PromotionsController {...PromotionsProps} />
262
+ )
250
263
  }
@@ -6,18 +6,22 @@ export const PromotionsContainer = styled.View`
6
6
  padding-right: 40px;
7
7
  `
8
8
 
9
+ export const WrapperSingleOffer = styled.View`
10
+ flex-direction: column;
11
+ width: 100%;
12
+ `
13
+
9
14
  export const SingleOfferContainer = styled.View`
10
15
  flex-direction: row;
11
16
  width: 100%;
12
17
  justify-content: space-between;
13
18
  align-items: center;
14
19
  margin-bottom: 20px;
15
-
16
20
  `
17
21
 
18
22
  export const OfferInformation = styled.View`
19
23
  justify-content: space-between;
20
- max-width: 75%;
24
+ max-width: 70%;
21
25
  `
22
26
 
23
27
  export const SearchBarContainer = styled.View`
@@ -29,6 +33,7 @@ export const SearchBarContainer = styled.View`
29
33
 
30
34
  export const SingleBusinessOffer = styled.View`
31
35
  flex-direction: row;
36
+ margin-bottom: 10px;
32
37
  `
33
38
 
34
39
  export const AvailableBusinesses = styled.View`
@@ -44,7 +44,7 @@ const ReviewDriverUI = (props: ReviewDriverParams) => {
44
44
  photoWrapper: {
45
45
  shadowColor: theme.colors.black,
46
46
  shadowRadius: 3,
47
- shadowOffset: {width: 1, height: 4},
47
+ shadowOffset: { width: 1, height: 4 },
48
48
  elevation: 3,
49
49
  borderRadius: 8,
50
50
  shadowOpacity: 0.1,
@@ -86,11 +86,11 @@ const ReviewDriverUI = (props: ReviewDriverParams) => {
86
86
  const [alertState, setAlertState] = useState<{ open: boolean, content: Array<any>, success?: boolean }>({ open: false, content: [], success: false })
87
87
 
88
88
  const qualificationList = [
89
- { key: 1, text: t('TERRIBLE', 'Terrible'), percent: 0, parentStyle: { left: '0%' }, isInnerStyle: false, pointerColor: false },
89
+ { key: 1, text: t('TERRIBLE', 'Terrible'), percent: 0, parentStyle: { left: '0%' }, isInnerStyle: false, pointerColor: false },
90
90
  { key: 2, text: t('BAD', 'Bad'), percent: 0.25, parentStyle: { left: '25%' }, isInnerStyle: true, pointerColor: true },
91
91
  { key: 3, text: t('OKAY', 'Okay'), percent: 0.5, parentStyle: { left: '50%' }, isInnerStyle: true, pointerColor: true },
92
92
  { key: 4, text: t('GOOD', 'Good'), percent: 0.75, parentStyle: { left: '75%' }, isInnerStyle: true, pointerColor: true },
93
- { key: 5, text: t('GREAT', 'Great'), percent: 1, parentStyle: { right: '0%' }, isInnerStyle: false, pointerColor: false }
93
+ { key: 5, text: t('GREAT', 'Great'), percent: 1, parentStyle: { right: '0%' }, isInnerStyle: false, pointerColor: false }
94
94
  ]
95
95
 
96
96
  const commentsList = reviewCommentList('driver')
@@ -186,7 +186,7 @@ const ReviewDriverUI = (props: ReviewDriverParams) => {
186
186
  <NavBar
187
187
  title={t('REVIEW_DRIVER', 'Review driver')}
188
188
  titleAlign={'center'}
189
- onActionLeft={() => navigation?.canGoBack() && navigation.goBack()}
189
+ onActionLeft={() => onNavigationRedirect('BottomTab')}
190
190
  showCall={false}
191
191
  btnStyle={{ paddingLeft: 0 }}
192
192
  style={{ flexDirection: 'column', alignItems: 'flex-start' }}
@@ -204,7 +204,7 @@ const ReviewDriverUI = (props: ReviewDriverParams) => {
204
204
  <OIcon
205
205
  url={order?.driver?.photo}
206
206
  src={!order?.driver?.photo && theme.images.general.user}
207
- cover={order?.driver?.photo ? true: false}
207
+ cover={order?.driver?.photo ? true : false}
208
208
  width={80}
209
209
  height={80}
210
210
  />
@@ -212,7 +212,7 @@ const ReviewDriverUI = (props: ReviewDriverParams) => {
212
212
  <OText weight={500} style={{ marginVertical: 10 }} color={theme.colors.textNormal}>{order?.driver?.name} {order?.driver?.lastname}</OText>
213
213
  </DriverPhotoContainer>
214
214
 
215
- <View style={{flex: 1, justifyContent: 'flex-end'}}>
215
+ <View style={{ flex: 1, justifyContent: 'flex-end' }}>
216
216
  <FormReviews>
217
217
  <OText mBottom={13} color={theme.colors.textNormal}>{t('HOW_WAS_YOUR_DRIVER', 'How was your driver?')}</OText>
218
218
  <RatingBarContainer>
@@ -264,7 +264,7 @@ const ReviewDriverUI = (props: ReviewDriverParams) => {
264
264
  style={{ height: 35, paddingLeft: 5, paddingRight: 5, marginHorizontal: 3, marginVertical: 10 }}
265
265
  imgRightSrc={isSelectedComment(commentItem.key) ? theme.images.general.close : null}
266
266
  imgRightStyle={{ tintColor: theme.colors.white, right: 5, margin: 5 }}
267
- onClick={() => handleChangeComment(commentItem) }
267
+ onClick={() => handleChangeComment(commentItem)}
268
268
  />
269
269
  ))}
270
270
  </CommentsButtonGroup>
@@ -92,6 +92,7 @@ export const ReviewOrderUI = (props: ReviewOrderParams) => {
92
92
  const [alertState, setAlertState] = useState<{ open: boolean, content: Array<any>, success?: boolean }>({ open: false, content: [], success: false })
93
93
  const [comments, setComments] = useState<Array<any>>([])
94
94
  const [extraComment, setExtraComment] = useState('')
95
+ const [enableProduct, setEnableProduct] = useState(true)
95
96
 
96
97
  const onSubmit = () => {
97
98
  if (Object.values(stars).some((value: any) => value === 0)) {
@@ -105,6 +106,7 @@ export const ReviewOrderUI = (props: ReviewOrderParams) => {
105
106
  handleReviewState && handleReviewState(order?.id)
106
107
  setIsReviewed && setIsReviewed(true)
107
108
  setAlertState({ ...alertState, success: true })
109
+ !enableProduct && navigation?.canGoBack() && navigation.goBack()
108
110
  }
109
111
 
110
112
  const qualificationList = [
@@ -141,7 +143,16 @@ export const ReviewOrderUI = (props: ReviewOrderParams) => {
141
143
  if (!order?.review) {
142
144
  onSubmit()
143
145
  } else {
144
- onNavigationRedirect('ReviewProducts', { order: order })
146
+ skipOrderReview()
147
+ }
148
+ }
149
+
150
+ const skipOrderReview = () => {
151
+ if (enableProduct) onNavigationRedirect('ReviewProducts', { order: order })
152
+ else if (order?.driver && !order?.user_review) {
153
+ onNavigationRedirect('ReviewDriver', { order: order })
154
+ } else {
155
+ navigation?.canGoBack() && navigation.goBack()
145
156
  }
146
157
  }
147
158
 
@@ -187,6 +198,10 @@ export const ReviewOrderUI = (props: ReviewOrderParams) => {
187
198
  setStars({ ...stars, comments: _comment })
188
199
  }, [comments, extraComment])
189
200
 
201
+ useEffect(() => {
202
+ setEnableProduct(!order?.products.every(product => product?.deleted))
203
+ }, [order])
204
+
190
205
  return (
191
206
  <>
192
207
  <ReviewOrderContainer>
@@ -296,7 +311,7 @@ export const ReviewOrderUI = (props: ReviewOrderParams) => {
296
311
  <FloatingBottomContainer>
297
312
  <ActionContainer>
298
313
  <SkipButton
299
- onPress={() => onNavigationRedirect('ReviewProducts', { order: order })}
314
+ onPress={() => skipOrderReview()}
300
315
  >
301
316
  <OText weight={700} size={18} color={theme.colors.textNormal}>{t('FRONT_VISUALS_SKIP', 'Skip')}</OText>
302
317
  </SkipButton>
@@ -318,7 +333,7 @@ export const ReviewOrder = (props: ReviewOrderParams) => {
318
333
  const reviewOrderProps = {
319
334
  ...props,
320
335
  UIComponent: ReviewOrderUI,
321
- defaultStar: 5
336
+ defaultStar: props?.defaultStar || 5
322
337
  }
323
338
  return <ReviewOrderController {...reviewOrderProps} />
324
339
  }
@@ -67,14 +67,14 @@ const ReviewProductsUI = (props: ReviewProductParams) => {
67
67
  <NavBar
68
68
  title={t('REVIEW_PRODUCT', 'Review product')}
69
69
  titleAlign={'center'}
70
- onActionLeft={() => onNavigationRedirect('MyOrders')}
70
+ onActionLeft={() => onNavigationRedirect('BottomTab')}
71
71
  showCall={false}
72
72
  btnStyle={{ paddingLeft: 0 }}
73
73
  style={{ flexDirection: 'column', alignItems: 'flex-start' }}
74
74
  titleWrapStyle={{ paddingHorizontal: 0 }}
75
75
  titleStyle={{ marginRight: 0, marginLeft: 0 }}
76
76
  />
77
- {order?.products?.map((product: any) => (
77
+ {order?.products?.map((product: any) => !product?.deleted && (
78
78
  <SingleProductReview
79
79
  key={product.id}
80
80
  product={product}