ordering-ui-react-native 0.15.89 → 0.15.90-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 (239) hide show
  1. package/package.json +7 -3
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/ActiveOrders/index.tsx +61 -63
  4. package/src/components/ActiveOrders/styles.tsx +1 -1
  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 +16 -8
  8. package/src/components/BusinessInformation/index.tsx +14 -0
  9. package/src/components/BusinessTypeFilter/index.tsx +1 -2
  10. package/src/components/BusinessesListing/index.tsx +1 -1
  11. package/src/components/Checkout/index.tsx +25 -3
  12. package/src/components/DriverTips/index.tsx +11 -6
  13. package/src/components/LanguageSelector/index.tsx +21 -16
  14. package/src/components/LoginForm/index.tsx +120 -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 +7 -21
  19. package/src/components/PaymentOptions/index.tsx +335 -365
  20. package/src/components/PaymentOptionsWebView/index.tsx +120 -121
  21. package/src/components/ReviewDriver/index.tsx +1 -1
  22. package/src/components/ReviewOrder/index.tsx +2 -1
  23. package/src/components/ReviewProducts/index.tsx +11 -0
  24. package/src/components/SignupForm/index.tsx +145 -61
  25. package/src/components/SingleProductCard/index.tsx +16 -4
  26. package/src/components/SingleProductReview/index.tsx +1 -1
  27. package/src/components/StripeElementsForm/index.tsx +25 -16
  28. package/src/components/StripeMethodForm/index.tsx +22 -24
  29. package/src/components/UpsellingProducts/index.tsx +1 -1
  30. package/src/components/UserProfileForm/index.tsx +63 -6
  31. package/src/components/UserProfileForm/styles.tsx +8 -0
  32. package/src/components/VerifyPhone/styles.tsx +1 -2
  33. package/src/components/shared/OBottomPopup.tsx +6 -2
  34. package/src/components/shared/OModal.tsx +1 -1
  35. package/src/index.tsx +2 -0
  36. package/src/navigators/CheckoutNavigator.tsx +6 -0
  37. package/src/navigators/HomeNavigator.tsx +6 -0
  38. package/src/pages/BusinessesListing.tsx +7 -6
  39. package/src/pages/MultiCheckout.tsx +31 -0
  40. package/src/pages/MultiOrdersDetails.tsx +27 -0
  41. package/src/pages/OrderDetails.tsx +1 -1
  42. package/src/pages/ReviewDriver.tsx +2 -2
  43. package/src/pages/ReviewOrder.tsx +2 -2
  44. package/src/theme.json +0 -1
  45. package/src/types/index.tsx +18 -11
  46. package/src/utils/index.tsx +28 -29
  47. package/themes/business/index.tsx +4 -0
  48. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +100 -60
  49. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
  50. package/themes/business/src/components/Chat/index.tsx +52 -92
  51. package/themes/business/src/components/DriverMap/index.tsx +6 -5
  52. package/themes/business/src/components/DriverSchedule/index.tsx +71 -0
  53. package/themes/business/src/components/DriverSchedule/styles.tsx +6 -0
  54. package/themes/business/src/components/LoginForm/index.tsx +89 -2
  55. package/themes/business/src/components/LoginForm/styles.tsx +6 -0
  56. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  57. package/themes/business/src/components/MapView/index.tsx +1 -1
  58. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  59. package/themes/business/src/components/NewOrderNotification/index.tsx +26 -13
  60. package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
  61. package/themes/business/src/components/OrderDetails/Delivery.tsx +17 -7
  62. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +26 -18
  63. package/themes/business/src/components/OrdersListManager/index.tsx +11 -4
  64. package/themes/business/src/components/OrdersOption/index.tsx +66 -20
  65. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  66. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  67. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  68. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  69. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  70. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  71. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  72. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  73. package/themes/business/src/components/PreviousMessages/index.tsx +1 -0
  74. package/themes/business/src/components/PreviousOrders/index.tsx +7 -7
  75. package/themes/business/src/components/ProductItemAccordion/index.tsx +5 -4
  76. package/themes/business/src/components/ReviewCustomer/index.tsx +1 -1
  77. package/themes/business/src/components/ScheduleBlocked/index.tsx +53 -0
  78. package/themes/business/src/components/UserFormDetails/index.tsx +5 -2
  79. package/themes/business/src/components/UserProfileForm/index.tsx +28 -4
  80. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  81. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  82. package/themes/business/src/components/shared/OModal.tsx +41 -38
  83. package/themes/business/src/types/index.tsx +15 -7
  84. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  85. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  86. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  87. package/themes/kiosk/src/components/BusinessMenu/index.tsx +25 -26
  88. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -3
  89. package/themes/kiosk/src/components/Cart/index.tsx +10 -11
  90. package/themes/kiosk/src/components/CartBottomSheet/index.tsx +9 -2
  91. package/themes/kiosk/src/components/CartContent/index.tsx +0 -11
  92. package/themes/kiosk/src/components/CartItem/index.tsx +4 -3
  93. package/themes/kiosk/src/components/CategoriesMenu/index.tsx +107 -62
  94. package/themes/kiosk/src/components/Checkout/index.tsx +40 -22
  95. package/themes/kiosk/src/components/CustomerName/index.tsx +0 -6
  96. package/themes/kiosk/src/components/DrawerView/index.tsx +1 -0
  97. package/themes/kiosk/src/components/DrawerView/styles.tsx +2 -2
  98. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  99. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  100. package/themes/kiosk/src/components/OrderDetails/index.tsx +2 -2
  101. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +9 -11
  102. package/themes/kiosk/src/components/PaymentOptions/index.tsx +55 -53
  103. package/themes/kiosk/src/components/ProductForm/index.tsx +6 -7
  104. package/themes/kiosk/src/components/ProductOptionSubOption/index.tsx +3 -1
  105. package/themes/kiosk/src/components/UpsellingProducts/index.tsx +16 -5
  106. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  107. package/themes/kiosk/src/types/index.d.ts +1 -0
  108. package/themes/original/index.tsx +22 -0
  109. package/themes/original/src/components/ActiveOrders/index.tsx +15 -132
  110. package/themes/original/src/components/ActiveOrders/styles.tsx +0 -54
  111. package/themes/original/src/components/AddressForm/index.tsx +26 -33
  112. package/themes/original/src/components/AddressList/index.tsx +2 -2
  113. package/themes/original/src/components/AppleLogin/index.tsx +6 -8
  114. package/themes/original/src/components/BusinessBasicInformation/index.tsx +302 -160
  115. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +6 -2
  116. package/themes/original/src/components/BusinessController/index.tsx +179 -96
  117. package/themes/original/src/components/BusinessController/styles.tsx +5 -0
  118. package/themes/original/src/components/BusinessItemAccordion/index.tsx +11 -8
  119. package/themes/original/src/components/BusinessItemAccordion/styles.tsx +3 -1
  120. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  121. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  122. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  123. package/themes/original/src/components/BusinessListingSearch/index.tsx +217 -127
  124. package/themes/original/src/components/BusinessListingSearch/styles.tsx +29 -11
  125. package/themes/original/src/components/BusinessPreorder/index.tsx +1 -1
  126. package/themes/original/src/components/BusinessProductsCategories/index.tsx +2 -2
  127. package/themes/original/src/components/BusinessProductsList/CategoryDescription/index.tsx +44 -0
  128. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  129. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  130. package/themes/original/src/components/BusinessProductsList/index.tsx +66 -73
  131. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  132. package/themes/original/src/components/BusinessProductsListing/index.tsx +296 -178
  133. package/themes/original/src/components/BusinessProductsListing/styles.tsx +18 -0
  134. package/themes/original/src/components/BusinessReviews/index.tsx +6 -1
  135. package/themes/original/src/components/BusinessTypeFilter/index.tsx +106 -38
  136. package/themes/original/src/components/BusinessTypeFilter/styles.tsx +2 -0
  137. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +561 -0
  138. package/themes/original/src/components/BusinessesListing/{styles.tsx → Layout/Appointment/styles.tsx} +24 -2
  139. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +673 -0
  140. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +137 -0
  141. package/themes/original/src/components/BusinessesListing/index.tsx +102 -462
  142. package/themes/original/src/components/Cart/index.tsx +83 -38
  143. package/themes/original/src/components/Cart/styles.tsx +4 -0
  144. package/themes/original/src/components/CartContent/index.tsx +3 -3
  145. package/themes/original/src/components/Checkout/index.tsx +142 -94
  146. package/themes/original/src/components/Checkout/styles.tsx +0 -1
  147. package/themes/original/src/components/DriverTips/index.tsx +17 -12
  148. package/themes/original/src/components/Favorite/index.tsx +92 -0
  149. package/themes/original/src/components/Favorite/styles.tsx +22 -0
  150. package/themes/original/src/components/FavoriteList/index.tsx +298 -0
  151. package/themes/original/src/components/FavoriteList/styles.tsx +5 -0
  152. package/themes/original/src/components/GPSButton/index.tsx +25 -17
  153. package/themes/original/src/components/GoogleMap/index.tsx +11 -11
  154. package/themes/original/src/components/Help/index.tsx +21 -4
  155. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +8 -3
  156. package/themes/original/src/components/HelpGuide/index.tsx +8 -3
  157. package/themes/original/src/components/HelpOrder/index.tsx +8 -3
  158. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +18 -1
  159. package/themes/original/src/components/LastOrders/index.tsx +12 -1
  160. package/themes/original/src/components/LoginForm/Otp/index.tsx +3 -3
  161. package/themes/original/src/components/LoginForm/index.tsx +52 -13
  162. package/themes/original/src/components/LoginForm/styles.tsx +1 -3
  163. package/themes/original/src/components/Messages/index.tsx +17 -17
  164. package/themes/original/src/components/MomentSelector/index.tsx +197 -0
  165. package/themes/original/src/components/MomentSelector/styles.tsx +6 -0
  166. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +243 -0
  167. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/styles.tsx +46 -0
  168. package/themes/original/src/components/MultiCheckout/index.tsx +304 -0
  169. package/themes/original/src/components/MultiCheckout/styles.tsx +59 -0
  170. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +372 -0
  171. package/themes/original/src/components/MultiOrdersDetails/index.tsx +262 -0
  172. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +50 -0
  173. package/themes/original/src/components/MyOrders/index.tsx +132 -27
  174. package/themes/original/src/components/MyOrders/styles.tsx +8 -1
  175. package/themes/original/src/components/NavBar/index.tsx +11 -5
  176. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +167 -0
  177. package/themes/original/src/components/OrderDetails/index.tsx +153 -77
  178. package/themes/original/src/components/OrderDetails/styles.tsx +5 -2
  179. package/themes/original/src/components/OrderItAgain/index.tsx +73 -0
  180. package/themes/original/src/components/OrderItAgain/styles.tsx +10 -0
  181. package/themes/original/src/components/OrderProgress/index.tsx +8 -2
  182. package/themes/original/src/components/OrderSummary/index.tsx +2 -35
  183. package/themes/original/src/components/OrderTypeSelector/index.tsx +84 -36
  184. package/themes/original/src/components/OrderTypeSelector/styles.tsx +19 -1
  185. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +140 -0
  186. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/styles.tsx +6 -0
  187. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +53 -0
  188. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/styles.tsx +6 -0
  189. package/themes/original/src/components/OrdersOption/index.tsx +138 -46
  190. package/themes/original/src/components/OrdersOption/styles.tsx +4 -1
  191. package/themes/original/src/components/PaymentOptionCash/index.tsx +2 -2
  192. package/themes/original/src/components/PaymentOptionWallet/index.tsx +15 -22
  193. package/themes/original/src/components/PaymentOptions/index.tsx +57 -37
  194. package/themes/original/src/components/PhoneInputNumber/index.tsx +4 -10
  195. package/themes/original/src/components/PlaceSpot/index.tsx +243 -47
  196. package/themes/original/src/components/PlaceSpot/styles.tsx +0 -2
  197. package/themes/original/src/components/PreviousOrders/index.tsx +18 -147
  198. package/themes/original/src/components/ProductForm/index.tsx +737 -682
  199. package/themes/original/src/components/ProductForm/styles.tsx +9 -7
  200. package/themes/original/src/components/ProductItemAccordion/index.tsx +2 -2
  201. package/themes/original/src/components/ProductOption/index.tsx +1 -1
  202. package/themes/original/src/components/ProductOptionSubOption/index.tsx +13 -9
  203. package/themes/original/src/components/ProfessionalFilter/index.tsx +128 -0
  204. package/themes/original/src/components/ProfessionalFilter/styles.tsx +0 -0
  205. package/themes/original/src/components/ProfessionalProfile/index.tsx +298 -0
  206. package/themes/original/src/components/ProfessionalProfile/styles.tsx +46 -0
  207. package/themes/original/src/components/Promotions/index.tsx +22 -6
  208. package/themes/original/src/components/ReviewDriver/index.tsx +6 -6
  209. package/themes/original/src/components/ReviewOrder/index.tsx +1 -1
  210. package/themes/original/src/components/ReviewTrigger/index.tsx +118 -0
  211. package/themes/original/src/components/ReviewTrigger/styles.tsx +34 -0
  212. package/themes/original/src/components/SearchBar/index.tsx +13 -5
  213. package/themes/original/src/components/ServiceForm/index.tsx +579 -0
  214. package/themes/original/src/components/ServiceForm/styles.tsx +50 -0
  215. package/themes/original/src/components/SignupForm/index.tsx +237 -127
  216. package/themes/original/src/components/SingleOrderCard/index.tsx +316 -0
  217. package/themes/original/src/components/SingleOrderCard/styles.tsx +54 -0
  218. package/themes/original/src/components/SingleProductCard/index.tsx +197 -95
  219. package/themes/original/src/components/SingleProductCard/styles.tsx +2 -2
  220. package/themes/original/src/components/StripeElementsForm/index.tsx +25 -9
  221. package/themes/original/src/components/StripeElementsForm/naked.tsx +2 -2
  222. package/themes/original/src/components/UpsellingProducts/index.tsx +7 -3
  223. package/themes/original/src/components/UserDetails/index.tsx +32 -18
  224. package/themes/original/src/components/UserFormDetails/index.tsx +108 -74
  225. package/themes/original/src/components/UserProfile/index.tsx +4 -0
  226. package/themes/original/src/components/UserProfileForm/index.tsx +15 -10
  227. package/themes/original/src/components/UserVerification/index.tsx +178 -192
  228. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  229. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  230. package/themes/original/src/components/Wallets/index.tsx +176 -162
  231. package/themes/original/src/components/Wallets/styles.tsx +10 -8
  232. package/themes/original/src/components/shared/OBottomPopup.tsx +47 -14
  233. package/themes/original/src/components/shared/OButton.tsx +10 -3
  234. package/themes/original/src/components/shared/OInput.tsx +3 -2
  235. package/themes/original/src/components/shared/OModal.tsx +4 -2
  236. package/themes/original/src/layouts/FloatingBottomContainer.tsx +5 -1
  237. package/themes/original/src/types/index.tsx +199 -48
  238. package/themes/original/src/utils/index.tsx +77 -0
  239. 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'
3
- import { ScrollView, StyleSheet, TouchableOpacity, Platform, View } from 'react-native'
2
+ import { useLanguage, BusinessSearchList, useOrder, useUtils, showToast, ToastType } from 'ordering-components/native'
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,18 +19,24 @@ import {
19
19
  Metadata,
20
20
  SingleBusinessContainer,
21
21
  LoadMoreBusinessContainer,
22
- ProgressContentWrapper,
23
- ProgressBar,
24
22
  TagsContainer,
25
- SortContainer
23
+ SortContainer,
24
+ BrandContainer,
25
+ BrandItem,
26
+ PriceFilterWrapper,
27
+ OptionTitle,
28
+ BContainer,
29
+ WrapperButtons
26
30
  } from './styles'
27
31
  import FastImage from 'react-native-fast-image'
28
32
  import { convertHoursToMinutes } from '../../utils'
29
33
  import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder'
30
34
  import { BusinessSearchParams } from '../../types'
31
-
32
- export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
33
-
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) => {
34
40
  const {
35
41
  navigation,
36
42
  businessesSearchList,
@@ -42,9 +48,15 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
42
48
  handleChangeFilters,
43
49
  filters,
44
50
  businessTypes,
45
- setFilters
51
+ setFilters,
52
+ brandList,
53
+ onNavigationRedirect,
54
+ handleUpdateBusinessList,
55
+ handleUpdateProducts
46
56
  } = props
47
57
 
58
+ const screenHeight = Dimensions.get('window').height;
59
+ const screenWidth = Dimensions.get('window').width;
48
60
  const theme = useTheme()
49
61
  const [orderState] = useOrder()
50
62
  const { top } = useSafeAreaInsets();
@@ -63,27 +75,44 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
63
75
  { text: t('PICKUP_TIME', 'Pickup time'), value: 'pickup_time' }
64
76
  ]
65
77
 
78
+ const priceList = [
79
+ { level: '1', content: '$' },
80
+ { level: '2', content: '$$' },
81
+ { level: '3', content: '$$$' },
82
+ { level: '4', content: '$$$$' },
83
+ { level: '5', content: '$$$$$' }
84
+ ]
85
+
86
+ const isFocused = useIsFocused();
87
+
66
88
  const styles = StyleSheet.create({
67
89
  container: {
68
90
  paddingHorizontal: 40,
69
91
  width: '100%'
70
92
  },
93
+ filterContainer: {
94
+ maxHeight: screenHeight - 150,
95
+ paddingHorizontal: 40,
96
+ width: '100%'
97
+ },
71
98
  searchInput: {
72
99
  fontSize: 10,
73
100
  },
74
101
  productsContainer: {
75
102
  marginTop: 20
76
103
  },
77
- maxContainer: {
78
- flexDirection: 'row',
79
- justifyContent: 'space-between'
80
- },
81
104
  businessTypesContainer: {
82
105
  width: '100%',
83
106
  flexDirection: 'row',
84
107
  flexWrap: 'wrap',
85
108
  justifyContent: 'center'
86
109
  },
110
+ priceContainer: {
111
+ width: '100%',
112
+ flexDirection: 'row',
113
+ flexWrap: 'wrap',
114
+ justifyContent: 'space-between'
115
+ },
87
116
  categoryStyle: {
88
117
  marginRight: 10,
89
118
  marginTop: 10,
@@ -95,8 +124,18 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
95
124
  height: 28,
96
125
  borderWidth: 0
97
126
  },
127
+ priceItem: {
128
+ marginRight: 10,
129
+ marginTop: 10,
130
+ borderRadius: 50,
131
+ paddingVertical: 4,
132
+ paddingLeft: 5,
133
+ paddingRight: 5,
134
+ height: 27,
135
+ borderWidth: 0
136
+ },
98
137
  applyButton: {
99
- paddingHorizontal: 40,
138
+ paddingHorizontal: 10,
100
139
  width: '100%',
101
140
  marginTop: 20
102
141
  }
@@ -107,10 +146,14 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
107
146
  }
108
147
 
109
148
  const handleCloseFilters = () => {
110
- setFilters({ business_types: [], orderBy: 'default' })
149
+ clearFilters()
111
150
  setOpenFilters(false)
112
151
  }
113
152
 
153
+ const clearFilters = () => {
154
+ setFilters({ business_types: [], orderBy: 'default', franchise_ids: [], price_level: null })
155
+ }
156
+
114
157
  const handleChangeActiveBusinessType = (type: any) => {
115
158
  if (type?.id === null) {
116
159
  handleChangeFilters('business_types', [])
@@ -126,11 +169,47 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
126
169
  }
127
170
  }
128
171
 
172
+ const handleChangeBrandFilter = (brandId: number) => {
173
+ let franchiseIds = [...filters?.franchise_ids]
174
+ if (filters?.franchise_ids?.includes(brandId)) franchiseIds = filters?.franchise_ids?.filter((item: any) => item !== brandId)
175
+ else franchiseIds.push(brandId)
176
+ handleChangeFilters && handleChangeFilters('franchise_ids', franchiseIds)
177
+ }
178
+
179
+ const handleChangePriceRange = (value: string) => {
180
+ if (value === filters?.price_level) handleChangeFilters('price_level', null)
181
+ else handleChangeFilters('price_level', value)
182
+ }
183
+
129
184
  const handleApplyFilters = () => {
130
185
  handleSearchbusinessAndProducts(true)
131
186
  setOpenFilters(false)
132
187
  }
133
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
+
134
213
  useEffect(() => {
135
214
  if (filters.business_types?.length === 0 && filters.orderBy === 'default' && Object.keys(filters)?.length === 2 && !openFilters) {
136
215
  handleSearchbusinessAndProducts(true)
@@ -141,56 +220,13 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
141
220
  handleSearchbusinessAndProducts(true)
142
221
  }, [])
143
222
 
144
- const MaxSectionItem = ({ title, options, filter }: any) => {
145
- const parseValue = (option: number) => {
146
- return filter === 'max_distance'
147
- ? `${option / 1000} ${t('KM', 'Km')}`
148
- : filter === 'max_eta'
149
- ? `${option} ${t('MIN', 'min')}`
150
- : parsePrice(option)
151
- }
152
- return (
153
- <View style={{ marginBottom: 20 }}>
154
- <OText weight='bold' mBottom={10} size={16}>
155
- {title}
156
- </OText>
157
- <ProgressContentWrapper>
158
- <ProgressBar style={{ width: `${((options.indexOf(filters?.[filter]) / 3) * 100) ?? 100}%` }} />
159
- </ProgressContentWrapper>
160
- <View style={styles.maxContainer}>
161
- {options.map((option: any, i: number) => (
162
- <TouchableOpacity
163
- onPress={() => handleChangeFilters(filter, option)}
164
- key={option}
165
- >
166
- <OText
167
- size={12}
168
- weight={filters?.[filter] === option || (option === 'default' && (filters?.[filter] === 'default' || !filters?.[filter])) ? 'bold' : '500'}
169
- >
170
- {option === 'default' ? `${parseValue(options[i - 1])}+` : parseValue(option)}
171
- </OText>
172
- </TouchableOpacity>
173
- ))}
174
- </View>
175
- </View>
176
- )
177
- }
223
+
224
+ useEffect(() => {
225
+ handleChangeTermValue('')
226
+ }, [isFocused])
178
227
 
179
228
  return (
180
- <ScrollView style={styles.container}>
181
- <WrapHeader style={{ paddingTop: top + 20, marginVertical: 2 }}>
182
- <TouchableOpacity onPress={() => navigation?.canGoBack() && navigation.goBack()} style={{ position: 'absolute', paddingVertical: 20 }}>
183
- <OIcon src={theme.images.general.arrow_left} width={20} />
184
- </TouchableOpacity>
185
- <OText
186
- size={20}
187
- mBottom={15}
188
- weight='bold'
189
- style={{ marginTop: 10 }}
190
- >
191
- {t('SEARCH', 'Search')}
192
- </OText>
193
- </WrapHeader>
229
+ <BContainer>
194
230
  <SearchWrapper>
195
231
  <SearchBar
196
232
  lazyLoad
@@ -200,7 +236,6 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
200
236
  value={termValue}
201
237
  iconCustomRight={<AntDesignIcon name='filter' size={16} style={{ bottom: 2 }} onPress={() => handleOpenfilters()} />}
202
238
  />
203
-
204
239
  </SearchWrapper>
205
240
  {
206
241
  noResults && (
@@ -211,15 +246,32 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
211
246
  </View>
212
247
  )
213
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>
214
264
  <ScrollView horizontal>
215
265
  {businessesSearchList.businesses?.length > 0 && businessesSearchList.businesses.map((business: any, i: number) => (
216
266
  <BusinessController
217
267
  key={business.id}
218
268
  business={business}
219
269
  isBusinessOpen={business.open}
270
+ enableIntersection={false}
220
271
  handleCustomClick={() => onBusinessClick(business)}
272
+ handleUpdateBusinessList={handleUpdateBusinessList}
221
273
  orderType={orderState?.options?.type}
222
- 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 }}
223
275
  />
224
276
  ))}
225
277
  {!businessesSearchList.loading && paginationProps?.totalPages && paginationProps?.currentPage < paginationProps?.totalPages && (
@@ -234,55 +286,7 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
234
286
  </LoadMoreBusinessContainer>
235
287
  )}
236
288
  {businessesSearchList.loading && (
237
- <>
238
- {[
239
- ...Array(
240
- paginationProps.nextPageItems
241
- ? paginationProps.nextPageItems
242
- : 3,
243
- ).keys(),
244
- ].map((item, i) => (
245
- <Placeholder
246
- Animation={Fade}
247
- key={i}
248
- style={{ width: 320, marginRight: 20, marginTop: 20 }}>
249
- <View style={{ width: 320 }}>
250
- <PlaceholderLine
251
- height={155}
252
- style={{ marginBottom: 20, borderRadius: 25 }}
253
- />
254
- <View style={{ paddingHorizontal: 10 }}>
255
- <View
256
- style={{
257
- flexDirection: 'row',
258
- justifyContent: 'space-between',
259
- }}>
260
- <PlaceholderLine
261
- height={25}
262
- width={40}
263
- style={{ marginBottom: 10 }}
264
- />
265
- <PlaceholderLine
266
- height={25}
267
- width={20}
268
- style={{ marginBottom: 10 }}
269
- />
270
- </View>
271
- <PlaceholderLine
272
- height={20}
273
- width={30}
274
- style={{ marginBottom: 10 }}
275
- />
276
- <PlaceholderLine
277
- height={20}
278
- width={80}
279
- style={{ marginBottom: 0 }}
280
- />
281
- </View>
282
- </View>
283
- </Placeholder>
284
- ))}
285
- </>
289
+ <BusinessControllerSkeletons paginationProps={paginationProps} />
286
290
  )}
287
291
  </ScrollView>
288
292
  <ProductsList>
@@ -329,16 +333,18 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
329
333
  style={{ borderRadius: 50, paddingLeft: 5, paddingRight: 5, height: 20 }}
330
334
  />
331
335
  </SingleBusinessContainer>
332
- <ScrollView horizontal style={styles.productsContainer}>
336
+ <ScrollView horizontal style={styles.productsContainer} contentContainerStyle={{ flexGrow: 1 }}>
333
337
  {business?.categories?.map((category: any) => category?.products?.map((product: any, i: number) => (
334
338
  <SingleProductCard
335
339
  key={product?.id}
336
340
  isSoldOut={(product.inventoried && !product.quantity)}
337
341
  product={product}
342
+ enableIntersection={false}
338
343
  businessId={business?.id}
339
- onProductClick={() => { }}
344
+ onProductClick={(product: any) => onProductClick(business, category?.id, product?.id)}
340
345
  productAddedToCartLength={0}
341
- style={{ width: 320, marginRight: i === category?.products?.length - 1 ? 0 : 20 }}
346
+ handleUpdateProducts={(productId: number, changes: any) => handleUpdateProducts(productId, category?.id, business?.id, changes)}
347
+ style={{ width: screenWidth - 80, maxWidth: screenWidth - 80, marginRight: 20 }}
342
348
  />
343
349
  )))}
344
350
 
@@ -388,7 +394,7 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
388
394
  onCancel={() => handleCloseFilters()}
389
395
  onClose={() => handleCloseFilters()}
390
396
  >
391
- <ScrollView style={styles.container}>
397
+ <ScrollView style={styles.filterContainer}>
392
398
  <OText
393
399
  size={20}
394
400
  mBottom={15}
@@ -406,7 +412,7 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
406
412
  onPress={() => handleChangeFilters('orderBy', item?.value)}
407
413
  style={{ marginBottom: 7 }}
408
414
  >
409
- <OText
415
+ <OText
410
416
  weight={filters?.orderBy?.includes(item?.value) ? 'bold' : '500'}
411
417
  mBottom={filters?.orderBy?.includes(item?.value) ? 5 : 0}
412
418
  >
@@ -415,24 +421,94 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
415
421
  </TouchableOpacity>
416
422
  ))}
417
423
  </SortContainer>
424
+ <BrandContainer>
425
+ <OText
426
+ size={16}
427
+ weight='bold'
428
+ lineHeight={24}
429
+ style={{ marginBottom: 10 }}
430
+ >
431
+ {t('BRANDS', 'Brands')}
432
+ </OText>
433
+ {!brandList?.loading && !brandList?.error && brandList?.brands?.length > 0 && (
434
+ <ScrollView
435
+ style={{ maxHeight: 300, marginBottom: 10 }}
436
+ showsVerticalScrollIndicator={true}
437
+ nestedScrollEnabled={true}
438
+ >
439
+ {brandList?.brands.map((brand: any, i: number) => brand?.enabled && (
440
+ <BrandItem
441
+ key={i}
442
+ onPress={() => handleChangeBrandFilter(brand?.id)}
443
+ >
444
+ <OText
445
+ size={14}
446
+ weight={'400'}
447
+ lineHeight={24}
448
+ >
449
+ {brand?.name}
450
+ </OText>
451
+ {filters?.franchise_ids?.includes(brand?.id) && (
452
+ <AntDesignIcon
453
+ name='check'
454
+ color={theme.colors.success500}
455
+ size={16}
456
+ />
457
+ )}
458
+ </BrandItem>
459
+ ))}
460
+ </ScrollView>
461
+ )}
462
+ {!brandList?.loading && ((brandList?.brands?.filter((brand: any) => brand?.enabled))?.length === 0) && (
463
+ <OText size={14} weight='400'>{t('NO_RESULTS_FOUND', 'Sorry, no results found')}</OText>
464
+ )}
465
+ </BrandContainer>
466
+ <PriceFilterWrapper>
467
+ <OText
468
+ size={16}
469
+ weight='bold'
470
+ lineHeight={24}
471
+ style={{ marginBottom: 5 }}
472
+ >
473
+ {t('PRICE_RANGE', 'Price range')}
474
+ </OText>
475
+ <View style={styles.priceContainer}>
476
+ {priceList.map((price: any, i: number) => (
477
+ <OButton
478
+ key={i}
479
+ bgColor={(filters?.price_level === price?.level) ? theme.colors.primary : theme.colors.backgroundGray200}
480
+ onClick={() => handleChangePriceRange(price?.level)}
481
+ text={`${price.content} ${(filters?.price_level === price?.level) ? ' X' : ''}`}
482
+ style={styles.priceItem}
483
+ textStyle={{ fontSize: 10, color: (filters?.price_level === price?.level) ? theme.colors.backgroundLight : theme.colors.textNormal }}
484
+ />
485
+ ))}
486
+ </View>
487
+ </PriceFilterWrapper>
418
488
  {orderState?.options?.type === 1 && (
419
489
  <MaxSectionItem
490
+ filters={filters}
420
491
  title={t('MAX_DELIVERY_FEE', 'Max delivery fee')}
421
492
  options={maxDeliveryFeeOptions}
422
493
  filter='max_delivery_price'
494
+ handleChangeFilters={handleChangeFilters}
423
495
  />
424
496
  )}
425
497
  {[1, 2].includes(orderState?.options?.type) && (
426
498
  <MaxSectionItem
499
+ filters={filters}
427
500
  title={orderState?.options?.type === 1 ? t('MAX_DELIVERY_TIME', 'Max delivery time') : t('MAX_PICKUP_TIME', 'Max pickup time')}
428
501
  options={maxTimeOptions}
429
502
  filter='max_eta'
503
+ handleChangeFilters={handleChangeFilters}
430
504
  />
431
505
  )}
432
506
  <MaxSectionItem
507
+ filters={filters}
433
508
  title={t('MAX_DISTANCE', 'Max distance')}
434
509
  options={maxDistanceOptions}
435
510
  filter='max_distance'
511
+ handleChangeFilters={handleChangeFilters}
436
512
  />
437
513
  {businessTypes?.length > 0 && (
438
514
  <TagsContainer>
@@ -452,14 +528,28 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
452
528
  </TagsContainer>
453
529
  )}
454
530
  </ScrollView>
455
- <OButton
456
- text={t('APPLY', 'Apply')}
457
- parentStyle={styles.applyButton}
458
- textStyle={{ color: '#fff' }}
459
- onClick={() => handleApplyFilters()}
460
- />
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>
461
551
  </OModal>
462
- </ScrollView>
552
+ </BContainer>
463
553
  )
464
554
  }
465
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,22 +59,36 @@ 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};
62
+ export const TagsContainer = styled.View`
63
+ padding-bottom: 10px;
61
64
  `
62
65
 
63
- export const ProgressContentWrapper = styled.View`
64
- height: 4px;
65
- background: #F8F9FA;
66
+ export const SortContainer = styled.View`
66
67
  margin-bottom: 10px;
67
- flex: 1;
68
68
  `
69
69
 
70
- export const TagsContainer = styled.View`
70
+ export const BrandContainer = styled.View``
71
71
 
72
+ export const BrandItem = styled.TouchableOpacity`
73
+ flex-direction: row;
74
+ justify-content: space-between;
75
+ margin-bottom: 4px;
76
+ align-items: center;
72
77
  `
73
78
 
74
- export const SortContainer = styled.View`
75
- margin-bottom: 10px;
79
+ export const PriceFilterWrapper = styled.View`
80
+ margin-bottom: 20px;
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;
76
94
  `
@@ -144,7 +144,7 @@ const BusinessPreorderUI = (props: BusinessPreorderParams) => {
144
144
 
145
145
  const validateSelectedDate = (curdate: any, menu: any) => {
146
146
  const day = moment(curdate).format('d')
147
- setIsEnabled(menu?.schedule[day]?.enabled || false)
147
+ setIsEnabled(menu?.schedule?.[day]?.enabled || false)
148
148
  }
149
149
 
150
150
  const getTimes = (curdate: any, menu: any) => {
@@ -57,12 +57,12 @@ const BusinessProductsCategoriesUI = (props: any) => {
57
57
 
58
58
  if (!lazyLoadProductsRecommended) {
59
59
  if (category?.id) {
60
- scrollViewRef.current.scrollTo({
60
+ scrollViewRef?.current?.scrollTo && scrollViewRef.current.scrollTo({
61
61
  y: categoriesLayout[`cat_${category?.id}`]?.y + productListLayout?.y - 70,
62
62
  animated: true
63
63
  })
64
64
  } else {
65
- scrollViewRef.current.scrollTo({
65
+ scrollViewRef?.current?.scrollTo && scrollViewRef.current.scrollTo({
66
66
  y: productListLayout?.y - 70,
67
67
  animated: true
68
68
  })
@@ -0,0 +1,44 @@
1
+ import React from 'react'
2
+ import { OModal, OText, OIcon } from '../../shared'
3
+ import { ScrollView } from 'react-native'
4
+ import { useUtils } from 'ordering-components/native'
5
+
6
+ interface CategoryDescriptionParams {
7
+ openDescription?: {name: string, image: string, description: string} | null,
8
+ setOpenDescription: any;
9
+ }
10
+
11
+ function categoryDescriptionPropsAreEqual(prev : any, next : any) {
12
+ return prev.openDescription === next.openDescription
13
+ }
14
+
15
+ const CategoryDescription = (props : CategoryDescriptionParams) => {
16
+ const [{ optimizeImage }] = useUtils()
17
+ return (
18
+ <OModal
19
+ open={!!props.openDescription}
20
+ onClose={() => props.setOpenDescription(null)}
21
+ styleContainerCloseButton={{
22
+ marginLeft: -37,
23
+ width: 55,
24
+ height: 55,
25
+ marginTop: 2
26
+ }}
27
+ >
28
+ <OText size={20} style={{ paddingLeft: 70, paddingRight: 20, bottom: 25 }}>{props.openDescription?.name}</OText>
29
+ <ScrollView style={{ padding: 20 }}>
30
+ {!!props.openDescription?.image && (
31
+ <OIcon
32
+ url={optimizeImage(props.openDescription?.image, 'h_100,c_limit')}
33
+ width={240}
34
+ height={240}
35
+ style={{ borderRadius: 7.6 }}
36
+ />
37
+ )}
38
+ <OText mBottom={60}>{props.openDescription?.description}</OText>
39
+ </ScrollView>
40
+ </OModal>
41
+ )
42
+ }
43
+
44
+ export const CategoryDescriptionMemoized = React.memo(CategoryDescription,categoryDescriptionPropsAreEqual)