ordering-ui-react-native 0.16.24 → 0.16.25-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 (201) hide show
  1. package/package.json +7 -4
  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/AddressForm/index.tsx +18 -2
  6. package/src/components/BusinessBasicInformation/index.tsx +11 -19
  7. package/src/components/BusinessController/index.tsx +10 -8
  8. package/src/components/BusinessInformation/index.tsx +33 -4
  9. package/src/components/BusinessInformation/styles.tsx +2 -2
  10. package/src/components/BusinessProductsList/index.tsx +10 -10
  11. package/src/components/BusinessesListing/index.tsx +1 -1
  12. package/src/components/Checkout/index.tsx +2 -1
  13. package/src/components/LanguageSelector/index.tsx +21 -16
  14. package/src/components/LoginForm/index.tsx +118 -30
  15. package/src/components/LoginForm/styles.tsx +6 -0
  16. package/src/components/Messages/index.tsx +2 -2
  17. package/src/components/NotificationSetting/index.tsx +85 -0
  18. package/src/components/OrderDetails/index.tsx +2 -20
  19. package/src/components/OrdersOption/index.tsx +54 -56
  20. package/src/components/PaymentOptions/index.tsx +335 -365
  21. package/src/components/PaymentOptionsWebView/index.tsx +120 -121
  22. package/src/components/ReviewDriver/index.tsx +1 -1
  23. package/src/components/ReviewOrder/index.tsx +2 -1
  24. package/src/components/ReviewProducts/index.tsx +11 -0
  25. package/src/components/SignupForm/index.tsx +143 -61
  26. package/src/components/SingleProductReview/index.tsx +8 -5
  27. package/src/components/StripeElementsForm/index.tsx +25 -16
  28. package/src/components/VerifyPhone/styles.tsx +1 -2
  29. package/src/components/shared/OBottomPopup.tsx +6 -2
  30. package/src/index.tsx +2 -0
  31. package/src/pages/BusinessesListing.tsx +7 -6
  32. package/src/pages/OrderDetails.tsx +1 -1
  33. package/src/pages/ReviewDriver.tsx +2 -2
  34. package/src/pages/ReviewOrder.tsx +2 -2
  35. package/src/types/@fatnlazycat/react-native-recaptcha-v3/index.d.ts +1 -0
  36. package/src/types/index.tsx +13 -9
  37. package/src/utils/index.tsx +0 -1
  38. package/themes/business/index.tsx +4 -0
  39. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  40. package/themes/business/src/components/Chat/index.tsx +42 -34
  41. package/themes/business/src/components/DriverMap/index.tsx +7 -5
  42. package/themes/business/src/components/DriverSchedule/index.tsx +71 -0
  43. package/themes/business/src/components/DriverSchedule/styles.tsx +6 -0
  44. package/themes/business/src/components/LoginForm/index.tsx +111 -74
  45. package/themes/business/src/components/MapView/index.tsx +12 -1
  46. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  47. package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
  48. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +25 -19
  49. package/themes/business/src/components/OrdersListManager/index.tsx +10 -3
  50. package/themes/business/src/components/OrdersOption/index.tsx +65 -21
  51. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  52. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  53. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  54. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  55. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  56. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  57. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  58. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  59. package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
  60. package/themes/business/src/components/PreviousOrders/index.tsx +21 -23
  61. package/themes/business/src/components/ProductItemAccordion/index.tsx +5 -4
  62. package/themes/business/src/components/ReviewCustomer/index.tsx +1 -1
  63. package/themes/business/src/components/ScheduleBlocked/index.tsx +53 -0
  64. package/themes/business/src/components/UserFormDetails/index.tsx +5 -2
  65. package/themes/business/src/components/UserProfileForm/index.tsx +28 -4
  66. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  67. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  68. package/themes/business/src/components/shared/OModal.tsx +40 -37
  69. package/themes/business/src/types/index.tsx +15 -9
  70. package/themes/business/src/utils/index.tsx +10 -0
  71. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  72. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  73. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  74. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  75. package/themes/kiosk/src/components/LoginForm/index.tsx +121 -10
  76. package/themes/kiosk/src/components/LoginForm/styles.tsx +5 -0
  77. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  78. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  79. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  80. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  81. package/themes/kiosk/src/types/index.d.ts +2 -0
  82. package/themes/original/index.tsx +12 -0
  83. package/themes/original/src/components/AddressForm/index.tsx +139 -135
  84. package/themes/original/src/components/AddressList/index.tsx +1 -1
  85. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  86. package/themes/original/src/components/BusinessBasicInformation/index.tsx +311 -161
  87. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +6 -2
  88. package/themes/original/src/components/BusinessController/index.tsx +190 -113
  89. package/themes/original/src/components/BusinessController/styles.tsx +0 -7
  90. package/themes/original/src/components/BusinessItemAccordion/index.tsx +4 -4
  91. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  92. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  93. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  94. package/themes/original/src/components/BusinessListingSearch/index.tsx +101 -125
  95. package/themes/original/src/components/BusinessListingSearch/styles.tsx +18 -13
  96. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  97. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  98. package/themes/original/src/components/BusinessProductsList/index.tsx +49 -52
  99. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  100. package/themes/original/src/components/BusinessProductsListing/index.tsx +287 -175
  101. package/themes/original/src/components/BusinessProductsListing/styles.tsx +22 -8
  102. package/themes/original/src/components/BusinessReviews/index.tsx +6 -1
  103. package/themes/original/src/components/BusinessTypeFilter/index.tsx +109 -40
  104. package/themes/original/src/components/BusinessTypeFilter/styles.tsx +2 -0
  105. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +561 -0
  106. package/themes/original/src/components/BusinessesListing/{styles.tsx → Layout/Appointment/styles.tsx} +24 -10
  107. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +676 -0
  108. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +137 -0
  109. package/themes/original/src/components/BusinessesListing/index.tsx +105 -519
  110. package/themes/original/src/components/Cart/index.tsx +42 -10
  111. package/themes/original/src/components/Cart/styles.tsx +4 -0
  112. package/themes/original/src/components/CartContent/index.tsx +22 -16
  113. package/themes/original/src/components/Checkout/index.tsx +90 -53
  114. package/themes/original/src/components/Checkout/styles.tsx +0 -1
  115. package/themes/original/src/components/DriverTips/index.tsx +4 -4
  116. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  117. package/themes/original/src/components/Favorite/index.tsx +1 -0
  118. package/themes/original/src/components/FavoriteList/index.tsx +32 -2
  119. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  120. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  121. package/themes/original/src/components/GoogleMap/index.tsx +20 -12
  122. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +8 -3
  123. package/themes/original/src/components/HelpGuide/index.tsx +8 -3
  124. package/themes/original/src/components/HelpOrder/index.tsx +8 -3
  125. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  126. package/themes/original/src/components/LoginForm/Otp/index.tsx +3 -2
  127. package/themes/original/src/components/LoginForm/index.tsx +82 -44
  128. package/themes/original/src/components/LottieAnimation/index.tsx +69 -0
  129. package/themes/original/src/components/Messages/index.tsx +17 -17
  130. package/themes/original/src/components/MomentSelector/index.tsx +197 -0
  131. package/themes/original/src/components/MomentSelector/styles.tsx +6 -0
  132. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -92
  133. package/themes/original/src/components/MultiCheckout/index.tsx +6 -0
  134. package/themes/original/src/components/MultiOrdersDetails/index.tsx +20 -16
  135. package/themes/original/src/components/MyOrders/index.tsx +70 -6
  136. package/themes/original/src/components/NavBar/index.tsx +15 -9
  137. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  138. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  139. package/themes/original/src/components/Notifications/index.tsx +148 -0
  140. package/themes/original/src/components/Notifications/styles.tsx +17 -0
  141. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +167 -0
  142. package/themes/original/src/components/OrderDetails/index.tsx +190 -35
  143. package/themes/original/src/components/OrderDetails/styles.tsx +15 -2
  144. package/themes/original/src/components/OrderItAgain/index.tsx +75 -0
  145. package/themes/original/src/components/OrderItAgain/styles.tsx +10 -0
  146. package/themes/original/src/components/OrderProgress/index.tsx +8 -2
  147. package/themes/original/src/components/OrderSummary/index.tsx +1 -34
  148. package/themes/original/src/components/OrderTypeSelector/index.tsx +85 -36
  149. package/themes/original/src/components/OrderTypeSelector/styles.tsx +19 -1
  150. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +100 -106
  151. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +17 -12
  152. package/themes/original/src/components/OrdersOption/index.tsx +71 -55
  153. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  154. package/themes/original/src/components/PaymentOptions/index.tsx +42 -24
  155. package/themes/original/src/components/PhoneInputNumber/index.tsx +4 -10
  156. package/themes/original/src/components/PlaceSpot/index.tsx +243 -47
  157. package/themes/original/src/components/PlaceSpot/styles.tsx +0 -2
  158. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  159. package/themes/original/src/components/ProductForm/index.tsx +710 -653
  160. package/themes/original/src/components/ProductForm/styles.tsx +9 -7
  161. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  162. package/themes/original/src/components/ProductOption/index.tsx +1 -1
  163. package/themes/original/src/components/ProfessionalFilter/index.tsx +129 -0
  164. package/themes/original/src/components/ProfessionalFilter/styles.tsx +0 -0
  165. package/themes/original/src/components/ProfessionalProfile/index.tsx +309 -0
  166. package/themes/original/src/components/ProfessionalProfile/styles.tsx +46 -0
  167. package/themes/original/src/components/ReviewDriver/index.tsx +6 -6
  168. package/themes/original/src/components/ReviewOrder/index.tsx +18 -3
  169. package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
  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 +631 -0
  174. package/themes/original/src/components/ServiceForm/styles.tsx +50 -0
  175. package/themes/original/src/components/SignupForm/index.tsx +350 -206
  176. package/themes/original/src/components/SingleOrderCard/index.tsx +229 -181
  177. package/themes/original/src/components/SingleOrderCard/styles.tsx +0 -7
  178. package/themes/original/src/components/SingleProductCard/index.tsx +207 -107
  179. package/themes/original/src/components/SingleProductCard/styles.tsx +1 -10
  180. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  181. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  182. package/themes/original/src/components/StripeElementsForm/index.tsx +15 -7
  183. package/themes/original/src/components/UpsellingProducts/index.tsx +15 -5
  184. package/themes/original/src/components/UserDetails/index.tsx +31 -17
  185. package/themes/original/src/components/UserFormDetails/index.tsx +74 -81
  186. package/themes/original/src/components/UserProfile/index.tsx +54 -29
  187. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  188. package/themes/original/src/components/UserProfileForm/index.tsx +15 -10
  189. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  190. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  191. package/themes/original/src/components/Wallets/index.tsx +174 -162
  192. package/themes/original/src/components/Wallets/styles.tsx +10 -8
  193. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  194. package/themes/original/src/components/shared/OBottomPopup.tsx +47 -14
  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 +3 -2
  198. package/themes/original/src/layouts/FloatingBottomContainer.tsx +5 -1
  199. package/themes/original/src/types/index.tsx +122 -30
  200. package/themes/original/src/utils/index.tsx +77 -0
  201. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,9 +1,9 @@
1
1
  import React, { useEffect, useState } from 'react'
2
- import { useLanguage, BusinessSearchList, useOrder, useUtils } from 'ordering-components/native'
2
+ import { useLanguage, BusinessSearchList, useOrder, useUtils, showToast, ToastType } from 'ordering-components/native'
3
3
  import { ScrollView, StyleSheet, TouchableOpacity, Platform, View, Dimensions } from 'react-native'
4
4
  import { useSafeAreaInsets } from 'react-native-safe-area-context'
5
5
  import { useTheme } from 'styled-components/native'
6
- import { OButton, OIcon, OModal, OText } from '../shared'
6
+ import { OButton, OModal, OText } from '../shared'
7
7
  import { SearchBar } from '../SearchBar';
8
8
  import { BusinessController } from '../BusinessController'
9
9
  import { NotFoundSource } from '../NotFoundSource'
@@ -19,21 +19,24 @@ import {
19
19
  Metadata,
20
20
  SingleBusinessContainer,
21
21
  LoadMoreBusinessContainer,
22
- ProgressContentWrapper,
23
- ProgressBar,
24
22
  TagsContainer,
25
23
  SortContainer,
26
24
  BrandContainer,
27
25
  BrandItem,
28
- PriceFilterWrapper
26
+ PriceFilterWrapper,
27
+ OptionTitle,
28
+ BContainer,
29
+ WrapperButtons
29
30
  } from './styles'
30
31
  import FastImage from 'react-native-fast-image'
31
32
  import { convertHoursToMinutes } from '../../utils'
32
33
  import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder'
33
34
  import { BusinessSearchParams } from '../../types'
34
-
35
-
36
- export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
35
+ import { MyOrders } from '../MyOrders'
36
+ import { useIsFocused } from '@react-navigation/native';
37
+ import { MaxSectionItem } from './MaxSectionItem'
38
+ import { BusinessControllerSkeletons } from './BusinessControllerSkeletons'
39
+ export const BusinessListingSearchUI = (props: BusinessSearchParams) => {
37
40
  const {
38
41
  navigation,
39
42
  businessesSearchList,
@@ -47,11 +50,13 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
47
50
  businessTypes,
48
51
  setFilters,
49
52
  brandList,
53
+ onNavigationRedirect,
50
54
  handleUpdateBusinessList,
51
55
  handleUpdateProducts
52
56
  } = props
53
-
57
+
54
58
  const screenHeight = Dimensions.get('window').height;
59
+ const screenWidth = Dimensions.get('window').width;
55
60
  const theme = useTheme()
56
61
  const [orderState] = useOrder()
57
62
  const { top } = useSafeAreaInsets();
@@ -78,6 +83,8 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
78
83
  { level: '5', content: '$$$$$' }
79
84
  ]
80
85
 
86
+ const isFocused = useIsFocused();
87
+
81
88
  const styles = StyleSheet.create({
82
89
  container: {
83
90
  paddingHorizontal: 40,
@@ -94,10 +101,6 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
94
101
  productsContainer: {
95
102
  marginTop: 20
96
103
  },
97
- maxContainer: {
98
- flexDirection: 'row',
99
- justifyContent: 'space-between'
100
- },
101
104
  businessTypesContainer: {
102
105
  width: '100%',
103
106
  flexDirection: 'row',
@@ -132,7 +135,7 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
132
135
  borderWidth: 0
133
136
  },
134
137
  applyButton: {
135
- paddingHorizontal: 40,
138
+ paddingHorizontal: 10,
136
139
  width: '100%',
137
140
  marginTop: 20
138
141
  }
@@ -143,10 +146,14 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
143
146
  }
144
147
 
145
148
  const handleCloseFilters = () => {
146
- setFilters({ business_types: [], orderBy: 'default', franchise_ids: [], price_level: null })
149
+ clearFilters()
147
150
  setOpenFilters(false)
148
151
  }
149
152
 
153
+ const clearFilters = () => {
154
+ setFilters({ business_types: [], orderBy: 'default', franchise_ids: [], price_level: null })
155
+ }
156
+
150
157
  const handleChangeActiveBusinessType = (type: any) => {
151
158
  if (type?.id === null) {
152
159
  handleChangeFilters('business_types', [])
@@ -179,6 +186,30 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
179
186
  setOpenFilters(false)
180
187
  }
181
188
 
189
+ const isInteger = (val: any) => Number.isInteger(Number(val)) && !!val
190
+
191
+ const onProductClick = (business: any, categoryId: any, productId: any) => {
192
+ if (!isInteger(business?.id) ||
193
+ !isInteger(categoryId) ||
194
+ !isInteger(productId) ||
195
+ !business.slug || !business.header || !business.logo) {
196
+ showToast(ToastType.error, t('NOT_AVAILABLE', 'Not Available'))
197
+ return
198
+ }
199
+
200
+ navigation.navigate('ProductDetails', {
201
+ isRedirect: 'business',
202
+ businessId: business?.id,
203
+ categoryId: categoryId,
204
+ productId: productId,
205
+ business: {
206
+ store: business.slug,
207
+ header: business.header,
208
+ logo: business.logo,
209
+ }
210
+ })
211
+ }
212
+
182
213
  useEffect(() => {
183
214
  if (filters.business_types?.length === 0 && filters.orderBy === 'default' && Object.keys(filters)?.length === 2 && !openFilters) {
184
215
  handleSearchbusinessAndProducts(true)
@@ -189,56 +220,13 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
189
220
  handleSearchbusinessAndProducts(true)
190
221
  }, [])
191
222
 
192
- const MaxSectionItem = ({ title, options, filter }: any) => {
193
- const parseValue = (option: number) => {
194
- return filter === 'max_distance'
195
- ? `${option / 1000} ${t('KM', 'Km')}`
196
- : filter === 'max_eta'
197
- ? `${option} ${t('MIN', 'min')}`
198
- : parsePrice(option)
199
- }
200
- return (
201
- <View style={{ marginBottom: 20 }}>
202
- <OText weight='bold' mBottom={10} size={16}>
203
- {title}
204
- </OText>
205
- <ProgressContentWrapper>
206
- <ProgressBar style={{ width: `${((options.indexOf(filters?.[filter]) / 3) * 100) ?? 100}%` }} />
207
- </ProgressContentWrapper>
208
- <View style={styles.maxContainer}>
209
- {options.map((option: any, i: number) => (
210
- <TouchableOpacity
211
- onPress={() => handleChangeFilters(filter, option)}
212
- key={option}
213
- >
214
- <OText
215
- size={12}
216
- weight={filters?.[filter] === option || (option === 'default' && (filters?.[filter] === 'default' || !filters?.[filter])) ? 'bold' : '500'}
217
- >
218
- {option === 'default' ? `${parseValue(options[i - 1])}+` : parseValue(option)}
219
- </OText>
220
- </TouchableOpacity>
221
- ))}
222
- </View>
223
- </View>
224
- )
225
- }
223
+
224
+ useEffect(() => {
225
+ handleChangeTermValue('')
226
+ }, [isFocused])
226
227
 
227
228
  return (
228
- <ScrollView style={styles.container}>
229
- <WrapHeader style={{ paddingTop: top + 20, marginVertical: 2 }}>
230
- <TouchableOpacity onPress={() => navigation?.canGoBack() && navigation.goBack()} style={{ position: 'absolute', paddingVertical: 20 }}>
231
- <OIcon src={theme.images.general.arrow_left} width={20} />
232
- </TouchableOpacity>
233
- <OText
234
- size={20}
235
- mBottom={15}
236
- weight='bold'
237
- style={{ marginTop: 10 }}
238
- >
239
- {t('SEARCH', 'Search')}
240
- </OText>
241
- </WrapHeader>
229
+ <BContainer>
242
230
  <SearchWrapper>
243
231
  <SearchBar
244
232
  lazyLoad
@@ -248,7 +236,6 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
248
236
  value={termValue}
249
237
  iconCustomRight={<AntDesignIcon name='filter' size={16} style={{ bottom: 2 }} onPress={() => handleOpenfilters()} />}
250
238
  />
251
-
252
239
  </SearchWrapper>
253
240
  {
254
241
  noResults && (
@@ -259,16 +246,32 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
259
246
  </View>
260
247
  )
261
248
  }
249
+ {businessesSearchList.businesses?.length > 0 && termValue?.length === 0 && (
250
+ <MyOrders
251
+ hideOrders
252
+ businessesSearchList={businessesSearchList}
253
+ onNavigationRedirect={onNavigationRedirect}
254
+ BusinessControllerSkeletons={BusinessControllerSkeletons}
255
+ businessPaginationProps={paginationProps}
256
+ />
257
+ )}
258
+
259
+ <OptionTitle isBusinessesSearchList={!!businessesSearchList}>
260
+ <OText size={16} lineHeight={24} weight={'500'} color={theme.colors.textNormal} mBottom={10}>
261
+ {t('BUSINESSES', 'Businesses')}
262
+ </OText>
263
+ </OptionTitle>
262
264
  <ScrollView horizontal>
263
265
  {businessesSearchList.businesses?.length > 0 && businessesSearchList.businesses.map((business: any, i: number) => (
264
266
  <BusinessController
265
267
  key={business.id}
266
268
  business={business}
267
269
  isBusinessOpen={business.open}
270
+ enableIntersection={false}
268
271
  handleCustomClick={() => onBusinessClick(business)}
269
272
  handleUpdateBusinessList={handleUpdateBusinessList}
270
273
  orderType={orderState?.options?.type}
271
- style={{ width: 320, marginRight: (businessesSearchList.loading || i !== businessesSearchList.businesses?.length - 1) ? 20 : 0 }}
274
+ style={{ width: screenWidth - 120, marginRight: (businessesSearchList.loading || i !== businessesSearchList.businesses?.length - 1) ? 20 : 0 }}
272
275
  />
273
276
  ))}
274
277
  {!businessesSearchList.loading && paginationProps?.totalPages && paginationProps?.currentPage < paginationProps?.totalPages && (
@@ -283,55 +286,7 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
283
286
  </LoadMoreBusinessContainer>
284
287
  )}
285
288
  {businessesSearchList.loading && (
286
- <>
287
- {[
288
- ...Array(
289
- paginationProps.nextPageItems
290
- ? paginationProps.nextPageItems
291
- : 3,
292
- ).keys(),
293
- ].map((item, i) => (
294
- <Placeholder
295
- Animation={Fade}
296
- key={i}
297
- style={{ width: 320, marginRight: 20, marginTop: 20 }}>
298
- <View style={{ width: 320 }}>
299
- <PlaceholderLine
300
- height={155}
301
- style={{ marginBottom: 20, borderRadius: 25 }}
302
- />
303
- <View style={{ paddingHorizontal: 10 }}>
304
- <View
305
- style={{
306
- flexDirection: 'row',
307
- justifyContent: 'space-between',
308
- }}>
309
- <PlaceholderLine
310
- height={25}
311
- width={40}
312
- style={{ marginBottom: 10 }}
313
- />
314
- <PlaceholderLine
315
- height={25}
316
- width={20}
317
- style={{ marginBottom: 10 }}
318
- />
319
- </View>
320
- <PlaceholderLine
321
- height={20}
322
- width={30}
323
- style={{ marginBottom: 10 }}
324
- />
325
- <PlaceholderLine
326
- height={20}
327
- width={80}
328
- style={{ marginBottom: 0 }}
329
- />
330
- </View>
331
- </View>
332
- </Placeholder>
333
- ))}
334
- </>
289
+ <BusinessControllerSkeletons paginationProps={paginationProps} />
335
290
  )}
336
291
  </ScrollView>
337
292
  <ProductsList>
@@ -378,17 +333,18 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
378
333
  style={{ borderRadius: 50, paddingLeft: 5, paddingRight: 5, height: 20 }}
379
334
  />
380
335
  </SingleBusinessContainer>
381
- <ScrollView horizontal style={styles.productsContainer}>
336
+ <ScrollView horizontal style={styles.productsContainer} contentContainerStyle={{ flexGrow: 1 }}>
382
337
  {business?.categories?.map((category: any) => category?.products?.map((product: any, i: number) => (
383
338
  <SingleProductCard
384
339
  key={product?.id}
385
340
  isSoldOut={(product.inventoried && !product.quantity)}
386
341
  product={product}
342
+ enableIntersection={false}
387
343
  businessId={business?.id}
388
- onProductClick={() => { }}
344
+ onProductClick={(product: any) => onProductClick(business, category?.id, product?.id)}
389
345
  productAddedToCartLength={0}
390
346
  handleUpdateProducts={(productId: number, changes: any) => handleUpdateProducts(productId, category?.id, business?.id, changes)}
391
- style={{ width: 320, marginRight: i === category?.products?.length - 1 ? 0 : 20 }}
347
+ style={{ width: screenWidth - 80, maxWidth: screenWidth - 80, marginRight: 20 }}
392
348
  />
393
349
  )))}
394
350
 
@@ -456,7 +412,7 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
456
412
  onPress={() => handleChangeFilters('orderBy', item?.value)}
457
413
  style={{ marginBottom: 7 }}
458
414
  >
459
- <OText
415
+ <OText
460
416
  weight={filters?.orderBy?.includes(item?.value) ? 'bold' : '500'}
461
417
  mBottom={filters?.orderBy?.includes(item?.value) ? 5 : 0}
462
418
  >
@@ -531,22 +487,28 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
531
487
  </PriceFilterWrapper>
532
488
  {orderState?.options?.type === 1 && (
533
489
  <MaxSectionItem
490
+ filters={filters}
534
491
  title={t('MAX_DELIVERY_FEE', 'Max delivery fee')}
535
492
  options={maxDeliveryFeeOptions}
536
493
  filter='max_delivery_price'
494
+ handleChangeFilters={handleChangeFilters}
537
495
  />
538
496
  )}
539
497
  {[1, 2].includes(orderState?.options?.type) && (
540
498
  <MaxSectionItem
499
+ filters={filters}
541
500
  title={orderState?.options?.type === 1 ? t('MAX_DELIVERY_TIME', 'Max delivery time') : t('MAX_PICKUP_TIME', 'Max pickup time')}
542
501
  options={maxTimeOptions}
543
502
  filter='max_eta'
503
+ handleChangeFilters={handleChangeFilters}
544
504
  />
545
505
  )}
546
506
  <MaxSectionItem
507
+ filters={filters}
547
508
  title={t('MAX_DISTANCE', 'Max distance')}
548
509
  options={maxDistanceOptions}
549
510
  filter='max_distance'
511
+ handleChangeFilters={handleChangeFilters}
550
512
  />
551
513
  {businessTypes?.length > 0 && (
552
514
  <TagsContainer>
@@ -566,14 +528,28 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
566
528
  </TagsContainer>
567
529
  )}
568
530
  </ScrollView>
569
- <OButton
570
- text={t('APPLY', 'Apply')}
571
- parentStyle={styles.applyButton}
572
- textStyle={{ color: '#fff' }}
573
- onClick={() => handleApplyFilters()}
574
- />
531
+ <WrapperButtons>
532
+ <View style={{ width: '50%' }}>
533
+ <OButton
534
+ text={t('APPLY', 'Apply')}
535
+ parentStyle={styles.applyButton}
536
+ textStyle={{ color: '#fff' }}
537
+ onClick={() => handleApplyFilters()}
538
+ />
539
+ </View>
540
+ <View style={{ width: '50%' }}>
541
+ <OButton
542
+ text={t('CLEAR_FILTERS', 'Clear')}
543
+ bgColor={theme.colors.white}
544
+ borderColor={theme.colors.primary}
545
+ parentStyle={styles.applyButton}
546
+ textStyle={{ color: theme.colors.primary }}
547
+ onClick={() => clearFilters()}
548
+ />
549
+ </View>
550
+ </WrapperButtons>
575
551
  </OModal>
576
- </ScrollView>
552
+ </BContainer>
577
553
  )
578
554
  }
579
555
 
@@ -1,4 +1,8 @@
1
- import styled from 'styled-components/native'
1
+ import styled, { css } from 'styled-components/native'
2
+
3
+ export const BContainer = styled.View`
4
+ padding: 20px 40px;
5
+ `
2
6
 
3
7
  export const WrapHeader = styled.View`
4
8
  width: 100%;
@@ -55,18 +59,6 @@ export const LoadMoreBusinessContainer = styled.View`
55
59
  margin-left: 20px;
56
60
  `
57
61
 
58
- export const ProgressBar = styled.View`
59
- height: 4px;
60
- background: ${(props: any) => props.theme.colors.textNormal};
61
- `
62
-
63
- export const ProgressContentWrapper = styled.View`
64
- height: 4px;
65
- background: #F8F9FA;
66
- margin-bottom: 10px;
67
- flex: 1;
68
- `
69
-
70
62
  export const TagsContainer = styled.View`
71
63
  padding-bottom: 10px;
72
64
  `
@@ -87,3 +79,16 @@ export const BrandItem = styled.TouchableOpacity`
87
79
  export const PriceFilterWrapper = styled.View`
88
80
  margin-bottom: 20px;
89
81
  `
82
+
83
+ export const OptionTitle = styled.View`
84
+ margin-top: 24px;
85
+ ${(props: any) => props.titleContent && css`
86
+ margin-left: ${() => props.isBusinessesSearchList ? '0' : '40px'};
87
+ `}
88
+ `
89
+
90
+ export const WrapperButtons = styled.View`
91
+ flex-direction: row;
92
+ width: 100%;
93
+ justify-content: space-between;
94
+ `
@@ -0,0 +1,87 @@
1
+ import React from 'react'
2
+ import { useTheme } from 'styled-components/native'
3
+ import { StyleSheet } from 'react-native'
4
+ import { SubCategoriesContainer, ContainerButton } from './styles'
5
+ import { OButton } from '../../shared'
6
+ import { useLanguage } from 'ordering-components/native'
7
+
8
+ function SubcategoriesComponentPropsAreEqual(prev: any, next: any) {
9
+ return prev.subcategoriesSelected === next.subcategoriesSelected &&
10
+ prev.category === next.category
11
+ }
12
+
13
+ interface SubcategoriesComponentParams {
14
+ subcategoriesSelected?: any,
15
+ category?: any,
16
+ onClickSubcategory: any
17
+ }
18
+
19
+ const SubcategoriesComponent = (props : SubcategoriesComponentParams) => {
20
+ const {
21
+ subcategoriesSelected,
22
+ category,
23
+ onClickSubcategory
24
+ } = props
25
+
26
+ const theme = useTheme()
27
+ const [, t] = useLanguage()
28
+ const allsubcategorySelected = !subcategoriesSelected?.some((subcategory: any) => category?.id === subcategory?.parent_category_id)
29
+
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
+ });
50
+
51
+
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
+ )
85
+ }
86
+
87
+ export const SubcategoriesComponentMemoized = React.memo(SubcategoriesComponent, SubcategoriesComponentPropsAreEqual)
@@ -0,0 +1,12 @@
1
+ import styled from "styled-components/native";
2
+
3
+ export const SubCategoriesContainer = styled.View`
4
+ flex-direction: row;
5
+ flex-wrap: wrap;
6
+ margin-bottom: 10px;
7
+ `
8
+
9
+ export const ContainerButton = styled.View`
10
+ `
11
+
12
+ export const HeaderWrapper = styled.View``