ordering-ui-react-native 0.15.91 → 0.15.92-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 (236) 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 +1 -2
  47. package/themes/business/index.tsx +4 -0
  48. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +1 -1
  49. package/themes/business/src/components/Chat/index.tsx +14 -6
  50. package/themes/business/src/components/DriverMap/index.tsx +6 -5
  51. package/themes/business/src/components/DriverSchedule/index.tsx +71 -0
  52. package/themes/business/src/components/DriverSchedule/styles.tsx +6 -0
  53. package/themes/business/src/components/LoginForm/index.tsx +6 -4
  54. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  55. package/themes/business/src/components/MapView/index.tsx +1 -1
  56. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  57. package/themes/business/src/components/NewOrderNotification/index.tsx +24 -13
  58. package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
  59. package/themes/business/src/components/OrderDetails/Delivery.tsx +6 -4
  60. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +26 -18
  61. package/themes/business/src/components/OrdersListManager/index.tsx +10 -3
  62. package/themes/business/src/components/OrdersOption/index.tsx +67 -20
  63. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  64. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  65. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  66. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  67. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  68. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  69. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  70. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  71. package/themes/business/src/components/PreviousMessages/index.tsx +1 -0
  72. package/themes/business/src/components/PreviousOrders/index.tsx +7 -7
  73. package/themes/business/src/components/ProductItemAccordion/index.tsx +5 -4
  74. package/themes/business/src/components/ReviewCustomer/index.tsx +1 -1
  75. package/themes/business/src/components/ScheduleBlocked/index.tsx +53 -0
  76. package/themes/business/src/components/UserFormDetails/index.tsx +5 -2
  77. package/themes/business/src/components/UserProfileForm/index.tsx +28 -4
  78. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  79. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  80. package/themes/business/src/components/shared/OModal.tsx +41 -38
  81. package/themes/business/src/types/index.tsx +14 -9
  82. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  83. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  84. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  85. package/themes/kiosk/src/components/BusinessMenu/index.tsx +25 -26
  86. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -3
  87. package/themes/kiosk/src/components/Cart/index.tsx +10 -11
  88. package/themes/kiosk/src/components/CartBottomSheet/index.tsx +9 -2
  89. package/themes/kiosk/src/components/CartContent/index.tsx +0 -11
  90. package/themes/kiosk/src/components/CartItem/index.tsx +4 -3
  91. package/themes/kiosk/src/components/CategoriesMenu/index.tsx +107 -62
  92. package/themes/kiosk/src/components/Checkout/index.tsx +40 -22
  93. package/themes/kiosk/src/components/CustomerName/index.tsx +0 -6
  94. package/themes/kiosk/src/components/DrawerView/index.tsx +1 -0
  95. package/themes/kiosk/src/components/DrawerView/styles.tsx +2 -2
  96. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  97. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  98. package/themes/kiosk/src/components/OrderDetails/index.tsx +2 -2
  99. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +9 -11
  100. package/themes/kiosk/src/components/PaymentOptions/index.tsx +55 -53
  101. package/themes/kiosk/src/components/ProductForm/index.tsx +6 -7
  102. package/themes/kiosk/src/components/ProductOptionSubOption/index.tsx +3 -1
  103. package/themes/kiosk/src/components/UpsellingProducts/index.tsx +16 -5
  104. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  105. package/themes/kiosk/src/types/index.d.ts +1 -0
  106. package/themes/original/index.tsx +22 -0
  107. package/themes/original/src/components/ActiveOrders/index.tsx +15 -132
  108. package/themes/original/src/components/ActiveOrders/styles.tsx +0 -54
  109. package/themes/original/src/components/AddressForm/index.tsx +137 -134
  110. package/themes/original/src/components/AddressList/index.tsx +2 -2
  111. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  112. package/themes/original/src/components/BusinessBasicInformation/index.tsx +302 -160
  113. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +6 -2
  114. package/themes/original/src/components/BusinessController/index.tsx +179 -96
  115. package/themes/original/src/components/BusinessController/styles.tsx +5 -0
  116. package/themes/original/src/components/BusinessItemAccordion/index.tsx +11 -8
  117. package/themes/original/src/components/BusinessItemAccordion/styles.tsx +3 -1
  118. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  119. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  120. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  121. package/themes/original/src/components/BusinessListingSearch/index.tsx +158 -126
  122. package/themes/original/src/components/BusinessListingSearch/styles.tsx +22 -13
  123. package/themes/original/src/components/BusinessPreorder/index.tsx +1 -1
  124. package/themes/original/src/components/BusinessProductsCategories/index.tsx +2 -2
  125. package/themes/original/src/components/BusinessProductsList/CategoryDescription/index.tsx +44 -0
  126. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  127. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  128. package/themes/original/src/components/BusinessProductsList/index.tsx +66 -73
  129. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  130. package/themes/original/src/components/BusinessProductsListing/index.tsx +296 -178
  131. package/themes/original/src/components/BusinessProductsListing/styles.tsx +18 -0
  132. package/themes/original/src/components/BusinessReviews/index.tsx +6 -1
  133. package/themes/original/src/components/BusinessTypeFilter/index.tsx +106 -38
  134. package/themes/original/src/components/BusinessTypeFilter/styles.tsx +2 -0
  135. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +561 -0
  136. package/themes/original/src/components/BusinessesListing/{styles.tsx → Layout/Appointment/styles.tsx} +24 -2
  137. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +673 -0
  138. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +137 -0
  139. package/themes/original/src/components/BusinessesListing/index.tsx +102 -462
  140. package/themes/original/src/components/Cart/index.tsx +82 -37
  141. package/themes/original/src/components/Cart/styles.tsx +4 -0
  142. package/themes/original/src/components/CartContent/index.tsx +22 -16
  143. package/themes/original/src/components/Checkout/index.tsx +141 -93
  144. package/themes/original/src/components/Checkout/styles.tsx +0 -1
  145. package/themes/original/src/components/DriverTips/index.tsx +17 -12
  146. package/themes/original/src/components/Favorite/index.tsx +92 -0
  147. package/themes/original/src/components/Favorite/styles.tsx +22 -0
  148. package/themes/original/src/components/FavoriteList/index.tsx +298 -0
  149. package/themes/original/src/components/FavoriteList/styles.tsx +5 -0
  150. package/themes/original/src/components/GPSButton/index.tsx +25 -17
  151. package/themes/original/src/components/GoogleMap/index.tsx +21 -12
  152. package/themes/original/src/components/Help/index.tsx +21 -4
  153. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +8 -3
  154. package/themes/original/src/components/HelpGuide/index.tsx +8 -3
  155. package/themes/original/src/components/HelpOrder/index.tsx +8 -3
  156. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +18 -1
  157. package/themes/original/src/components/LastOrders/index.tsx +12 -1
  158. package/themes/original/src/components/LoginForm/Otp/index.tsx +3 -2
  159. package/themes/original/src/components/LoginForm/index.tsx +50 -11
  160. package/themes/original/src/components/Messages/index.tsx +17 -17
  161. package/themes/original/src/components/MomentSelector/index.tsx +197 -0
  162. package/themes/original/src/components/MomentSelector/styles.tsx +6 -0
  163. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +243 -0
  164. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/styles.tsx +46 -0
  165. package/themes/original/src/components/MultiCheckout/index.tsx +304 -0
  166. package/themes/original/src/components/MultiCheckout/styles.tsx +59 -0
  167. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +372 -0
  168. package/themes/original/src/components/MultiOrdersDetails/index.tsx +262 -0
  169. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +50 -0
  170. package/themes/original/src/components/MyOrders/index.tsx +132 -27
  171. package/themes/original/src/components/MyOrders/styles.tsx +8 -1
  172. package/themes/original/src/components/NavBar/index.tsx +11 -5
  173. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  174. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +167 -0
  175. package/themes/original/src/components/OrderDetails/index.tsx +154 -77
  176. package/themes/original/src/components/OrderDetails/styles.tsx +5 -2
  177. package/themes/original/src/components/OrderItAgain/index.tsx +73 -0
  178. package/themes/original/src/components/OrderItAgain/styles.tsx +10 -0
  179. package/themes/original/src/components/OrderProgress/index.tsx +8 -2
  180. package/themes/original/src/components/OrderSummary/index.tsx +2 -35
  181. package/themes/original/src/components/OrderTypeSelector/index.tsx +84 -36
  182. package/themes/original/src/components/OrderTypeSelector/styles.tsx +19 -1
  183. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +140 -0
  184. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/styles.tsx +6 -0
  185. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +53 -0
  186. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/styles.tsx +6 -0
  187. package/themes/original/src/components/OrdersOption/index.tsx +138 -46
  188. package/themes/original/src/components/OrdersOption/styles.tsx +4 -1
  189. package/themes/original/src/components/PaymentOptionCash/index.tsx +2 -2
  190. package/themes/original/src/components/PaymentOptionWallet/index.tsx +15 -22
  191. package/themes/original/src/components/PaymentOptions/index.tsx +57 -37
  192. package/themes/original/src/components/PhoneInputNumber/index.tsx +4 -10
  193. package/themes/original/src/components/PlaceSpot/index.tsx +243 -47
  194. package/themes/original/src/components/PlaceSpot/styles.tsx +0 -2
  195. package/themes/original/src/components/PreviousOrders/index.tsx +18 -147
  196. package/themes/original/src/components/ProductForm/index.tsx +694 -647
  197. package/themes/original/src/components/ProductForm/styles.tsx +9 -7
  198. package/themes/original/src/components/ProductItemAccordion/index.tsx +2 -2
  199. package/themes/original/src/components/ProductOption/index.tsx +1 -1
  200. package/themes/original/src/components/ProfessionalFilter/index.tsx +128 -0
  201. package/themes/original/src/components/ProfessionalFilter/styles.tsx +0 -0
  202. package/themes/original/src/components/ProfessionalProfile/index.tsx +298 -0
  203. package/themes/original/src/components/ProfessionalProfile/styles.tsx +46 -0
  204. package/themes/original/src/components/Promotions/index.tsx +22 -6
  205. package/themes/original/src/components/ReviewDriver/index.tsx +6 -6
  206. package/themes/original/src/components/ReviewOrder/index.tsx +1 -1
  207. package/themes/original/src/components/ReviewTrigger/index.tsx +118 -0
  208. package/themes/original/src/components/ReviewTrigger/styles.tsx +34 -0
  209. package/themes/original/src/components/SearchBar/index.tsx +13 -5
  210. package/themes/original/src/components/ServiceForm/index.tsx +579 -0
  211. package/themes/original/src/components/ServiceForm/styles.tsx +50 -0
  212. package/themes/original/src/components/SignupForm/index.tsx +237 -127
  213. package/themes/original/src/components/SingleOrderCard/index.tsx +316 -0
  214. package/themes/original/src/components/SingleOrderCard/styles.tsx +54 -0
  215. package/themes/original/src/components/SingleProductCard/index.tsx +204 -95
  216. package/themes/original/src/components/SingleProductCard/styles.tsx +2 -2
  217. package/themes/original/src/components/StripeElementsForm/index.tsx +25 -9
  218. package/themes/original/src/components/StripeElementsForm/naked.tsx +2 -2
  219. package/themes/original/src/components/UpsellingProducts/index.tsx +7 -3
  220. package/themes/original/src/components/UserDetails/index.tsx +32 -18
  221. package/themes/original/src/components/UserFormDetails/index.tsx +108 -74
  222. package/themes/original/src/components/UserProfile/index.tsx +4 -0
  223. package/themes/original/src/components/UserProfileForm/index.tsx +15 -10
  224. package/themes/original/src/components/UserVerification/index.tsx +178 -192
  225. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  226. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  227. package/themes/original/src/components/Wallets/index.tsx +176 -162
  228. package/themes/original/src/components/Wallets/styles.tsx +10 -8
  229. package/themes/original/src/components/shared/OBottomPopup.tsx +47 -14
  230. package/themes/original/src/components/shared/OButton.tsx +10 -3
  231. package/themes/original/src/components/shared/OInput.tsx +3 -2
  232. package/themes/original/src/components/shared/OModal.tsx +4 -2
  233. package/themes/original/src/layouts/FloatingBottomContainer.tsx +5 -1
  234. package/themes/original/src/types/index.tsx +198 -47
  235. package/themes/original/src/utils/index.tsx +77 -0
  236. 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,20 +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
- BrandItem
25
+ BrandItem,
26
+ PriceFilterWrapper,
27
+ OptionTitle,
28
+ BContainer,
29
+ WrapperButtons
28
30
  } from './styles'
29
31
  import FastImage from 'react-native-fast-image'
30
32
  import { convertHoursToMinutes } from '../../utils'
31
33
  import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder'
32
34
  import { BusinessSearchParams } from '../../types'
33
-
34
-
35
- 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) => {
36
40
  const {
37
41
  navigation,
38
42
  businessesSearchList,
@@ -45,10 +49,14 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
45
49
  filters,
46
50
  businessTypes,
47
51
  setFilters,
48
- brandList
52
+ brandList,
53
+ onNavigationRedirect,
54
+ handleUpdateBusinessList,
55
+ handleUpdateProducts
49
56
  } = props
50
-
57
+
51
58
  const screenHeight = Dimensions.get('window').height;
59
+ const screenWidth = Dimensions.get('window').width;
52
60
  const theme = useTheme()
53
61
  const [orderState] = useOrder()
54
62
  const { top } = useSafeAreaInsets();
@@ -67,6 +75,16 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
67
75
  { text: t('PICKUP_TIME', 'Pickup time'), value: 'pickup_time' }
68
76
  ]
69
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
+
70
88
  const styles = StyleSheet.create({
71
89
  container: {
72
90
  paddingHorizontal: 40,
@@ -83,16 +101,18 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
83
101
  productsContainer: {
84
102
  marginTop: 20
85
103
  },
86
- maxContainer: {
87
- flexDirection: 'row',
88
- justifyContent: 'space-between'
89
- },
90
104
  businessTypesContainer: {
91
105
  width: '100%',
92
106
  flexDirection: 'row',
93
107
  flexWrap: 'wrap',
94
108
  justifyContent: 'center'
95
109
  },
110
+ priceContainer: {
111
+ width: '100%',
112
+ flexDirection: 'row',
113
+ flexWrap: 'wrap',
114
+ justifyContent: 'space-between'
115
+ },
96
116
  categoryStyle: {
97
117
  marginRight: 10,
98
118
  marginTop: 10,
@@ -104,8 +124,18 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
104
124
  height: 28,
105
125
  borderWidth: 0
106
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
+ },
107
137
  applyButton: {
108
- paddingHorizontal: 40,
138
+ paddingHorizontal: 10,
109
139
  width: '100%',
110
140
  marginTop: 20
111
141
  }
@@ -116,10 +146,14 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
116
146
  }
117
147
 
118
148
  const handleCloseFilters = () => {
119
- setFilters({ business_types: [], orderBy: 'default', franchise_ids: [] })
149
+ clearFilters()
120
150
  setOpenFilters(false)
121
151
  }
122
152
 
153
+ const clearFilters = () => {
154
+ setFilters({ business_types: [], orderBy: 'default', franchise_ids: [], price_level: null })
155
+ }
156
+
123
157
  const handleChangeActiveBusinessType = (type: any) => {
124
158
  if (type?.id === null) {
125
159
  handleChangeFilters('business_types', [])
@@ -142,11 +176,40 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
142
176
  handleChangeFilters && handleChangeFilters('franchise_ids', franchiseIds)
143
177
  }
144
178
 
179
+ const handleChangePriceRange = (value: string) => {
180
+ if (value === filters?.price_level) handleChangeFilters('price_level', null)
181
+ else handleChangeFilters('price_level', value)
182
+ }
183
+
145
184
  const handleApplyFilters = () => {
146
185
  handleSearchbusinessAndProducts(true)
147
186
  setOpenFilters(false)
148
187
  }
149
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
+
150
213
  useEffect(() => {
151
214
  if (filters.business_types?.length === 0 && filters.orderBy === 'default' && Object.keys(filters)?.length === 2 && !openFilters) {
152
215
  handleSearchbusinessAndProducts(true)
@@ -157,56 +220,13 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
157
220
  handleSearchbusinessAndProducts(true)
158
221
  }, [])
159
222
 
160
- const MaxSectionItem = ({ title, options, filter }: any) => {
161
- const parseValue = (option: number) => {
162
- return filter === 'max_distance'
163
- ? `${option / 1000} ${t('KM', 'Km')}`
164
- : filter === 'max_eta'
165
- ? `${option} ${t('MIN', 'min')}`
166
- : parsePrice(option)
167
- }
168
- return (
169
- <View style={{ marginBottom: 20 }}>
170
- <OText weight='bold' mBottom={10} size={16}>
171
- {title}
172
- </OText>
173
- <ProgressContentWrapper>
174
- <ProgressBar style={{ width: `${((options.indexOf(filters?.[filter]) / 3) * 100) ?? 100}%` }} />
175
- </ProgressContentWrapper>
176
- <View style={styles.maxContainer}>
177
- {options.map((option: any, i: number) => (
178
- <TouchableOpacity
179
- onPress={() => handleChangeFilters(filter, option)}
180
- key={option}
181
- >
182
- <OText
183
- size={12}
184
- weight={filters?.[filter] === option || (option === 'default' && (filters?.[filter] === 'default' || !filters?.[filter])) ? 'bold' : '500'}
185
- >
186
- {option === 'default' ? `${parseValue(options[i - 1])}+` : parseValue(option)}
187
- </OText>
188
- </TouchableOpacity>
189
- ))}
190
- </View>
191
- </View>
192
- )
193
- }
223
+
224
+ useEffect(() => {
225
+ handleChangeTermValue('')
226
+ }, [isFocused])
194
227
 
195
228
  return (
196
- <ScrollView style={styles.container}>
197
- <WrapHeader style={{ paddingTop: top + 20, marginVertical: 2 }}>
198
- <TouchableOpacity onPress={() => navigation?.canGoBack() && navigation.goBack()} style={{ position: 'absolute', paddingVertical: 20 }}>
199
- <OIcon src={theme.images.general.arrow_left} width={20} />
200
- </TouchableOpacity>
201
- <OText
202
- size={20}
203
- mBottom={15}
204
- weight='bold'
205
- style={{ marginTop: 10 }}
206
- >
207
- {t('SEARCH', 'Search')}
208
- </OText>
209
- </WrapHeader>
229
+ <BContainer>
210
230
  <SearchWrapper>
211
231
  <SearchBar
212
232
  lazyLoad
@@ -216,7 +236,6 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
216
236
  value={termValue}
217
237
  iconCustomRight={<AntDesignIcon name='filter' size={16} style={{ bottom: 2 }} onPress={() => handleOpenfilters()} />}
218
238
  />
219
-
220
239
  </SearchWrapper>
221
240
  {
222
241
  noResults && (
@@ -227,15 +246,32 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
227
246
  </View>
228
247
  )
229
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>
230
264
  <ScrollView horizontal>
231
265
  {businessesSearchList.businesses?.length > 0 && businessesSearchList.businesses.map((business: any, i: number) => (
232
266
  <BusinessController
233
267
  key={business.id}
234
268
  business={business}
235
269
  isBusinessOpen={business.open}
270
+ enableIntersection={false}
236
271
  handleCustomClick={() => onBusinessClick(business)}
272
+ handleUpdateBusinessList={handleUpdateBusinessList}
237
273
  orderType={orderState?.options?.type}
238
- 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 }}
239
275
  />
240
276
  ))}
241
277
  {!businessesSearchList.loading && paginationProps?.totalPages && paginationProps?.currentPage < paginationProps?.totalPages && (
@@ -250,55 +286,7 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
250
286
  </LoadMoreBusinessContainer>
251
287
  )}
252
288
  {businessesSearchList.loading && (
253
- <>
254
- {[
255
- ...Array(
256
- paginationProps.nextPageItems
257
- ? paginationProps.nextPageItems
258
- : 3,
259
- ).keys(),
260
- ].map((item, i) => (
261
- <Placeholder
262
- Animation={Fade}
263
- key={i}
264
- style={{ width: 320, marginRight: 20, marginTop: 20 }}>
265
- <View style={{ width: 320 }}>
266
- <PlaceholderLine
267
- height={155}
268
- style={{ marginBottom: 20, borderRadius: 25 }}
269
- />
270
- <View style={{ paddingHorizontal: 10 }}>
271
- <View
272
- style={{
273
- flexDirection: 'row',
274
- justifyContent: 'space-between',
275
- }}>
276
- <PlaceholderLine
277
- height={25}
278
- width={40}
279
- style={{ marginBottom: 10 }}
280
- />
281
- <PlaceholderLine
282
- height={25}
283
- width={20}
284
- style={{ marginBottom: 10 }}
285
- />
286
- </View>
287
- <PlaceholderLine
288
- height={20}
289
- width={30}
290
- style={{ marginBottom: 10 }}
291
- />
292
- <PlaceholderLine
293
- height={20}
294
- width={80}
295
- style={{ marginBottom: 0 }}
296
- />
297
- </View>
298
- </View>
299
- </Placeholder>
300
- ))}
301
- </>
289
+ <BusinessControllerSkeletons paginationProps={paginationProps} />
302
290
  )}
303
291
  </ScrollView>
304
292
  <ProductsList>
@@ -345,16 +333,18 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
345
333
  style={{ borderRadius: 50, paddingLeft: 5, paddingRight: 5, height: 20 }}
346
334
  />
347
335
  </SingleBusinessContainer>
348
- <ScrollView horizontal style={styles.productsContainer}>
336
+ <ScrollView horizontal style={styles.productsContainer} contentContainerStyle={{ flexGrow: 1 }}>
349
337
  {business?.categories?.map((category: any) => category?.products?.map((product: any, i: number) => (
350
338
  <SingleProductCard
351
339
  key={product?.id}
352
340
  isSoldOut={(product.inventoried && !product.quantity)}
353
341
  product={product}
342
+ enableIntersection={false}
354
343
  businessId={business?.id}
355
- onProductClick={() => { }}
344
+ onProductClick={(product: any) => onProductClick(business, category?.id, product?.id)}
356
345
  productAddedToCartLength={0}
357
- 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 }}
358
348
  />
359
349
  )))}
360
350
 
@@ -422,7 +412,7 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
422
412
  onPress={() => handleChangeFilters('orderBy', item?.value)}
423
413
  style={{ marginBottom: 7 }}
424
414
  >
425
- <OText
415
+ <OText
426
416
  weight={filters?.orderBy?.includes(item?.value) ? 'bold' : '500'}
427
417
  mBottom={filters?.orderBy?.includes(item?.value) ? 5 : 0}
428
418
  >
@@ -473,24 +463,52 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
473
463
  <OText size={14} weight='400'>{t('NO_RESULTS_FOUND', 'Sorry, no results found')}</OText>
474
464
  )}
475
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>
476
488
  {orderState?.options?.type === 1 && (
477
489
  <MaxSectionItem
490
+ filters={filters}
478
491
  title={t('MAX_DELIVERY_FEE', 'Max delivery fee')}
479
492
  options={maxDeliveryFeeOptions}
480
493
  filter='max_delivery_price'
494
+ handleChangeFilters={handleChangeFilters}
481
495
  />
482
496
  )}
483
497
  {[1, 2].includes(orderState?.options?.type) && (
484
498
  <MaxSectionItem
499
+ filters={filters}
485
500
  title={orderState?.options?.type === 1 ? t('MAX_DELIVERY_TIME', 'Max delivery time') : t('MAX_PICKUP_TIME', 'Max pickup time')}
486
501
  options={maxTimeOptions}
487
502
  filter='max_eta'
503
+ handleChangeFilters={handleChangeFilters}
488
504
  />
489
505
  )}
490
506
  <MaxSectionItem
507
+ filters={filters}
491
508
  title={t('MAX_DISTANCE', 'Max distance')}
492
509
  options={maxDistanceOptions}
493
510
  filter='max_distance'
511
+ handleChangeFilters={handleChangeFilters}
494
512
  />
495
513
  {businessTypes?.length > 0 && (
496
514
  <TagsContainer>
@@ -510,14 +528,28 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
510
528
  </TagsContainer>
511
529
  )}
512
530
  </ScrollView>
513
- <OButton
514
- text={t('APPLY', 'Apply')}
515
- parentStyle={styles.applyButton}
516
- textStyle={{ color: '#fff' }}
517
- onClick={() => handleApplyFilters()}
518
- />
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>
519
551
  </OModal>
520
- </ScrollView>
552
+ </BContainer>
521
553
  )
522
554
  }
523
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
  `
@@ -83,3 +75,20 @@ export const BrandItem = styled.TouchableOpacity`
83
75
  margin-bottom: 4px;
84
76
  align-items: center;
85
77
  `
78
+
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;
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)
@@ -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``