ordering-ui-react-native 0.15.63 → 0.15.65-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 (213) hide show
  1. package/package.json +7 -3
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/AddressForm/index.tsx +18 -2
  4. package/src/components/BusinessBasicInformation/index.tsx +11 -19
  5. package/src/components/BusinessController/index.tsx +16 -8
  6. package/src/components/BusinessInformation/index.tsx +14 -0
  7. package/src/components/BusinessTypeFilter/index.tsx +1 -2
  8. package/src/components/BusinessesListing/index.tsx +1 -1
  9. package/src/components/Checkout/index.tsx +23 -2
  10. package/src/components/DriverTips/index.tsx +11 -6
  11. package/src/components/LanguageSelector/index.tsx +6 -2
  12. package/src/components/LoginForm/index.tsx +120 -30
  13. package/src/components/LoginForm/styles.tsx +6 -0
  14. package/src/components/OrderDetails/index.tsx +7 -21
  15. package/src/components/PaymentOptions/index.tsx +67 -50
  16. package/src/components/PaymentOptionsWebView/index.tsx +120 -121
  17. package/src/components/ReviewDriver/index.tsx +1 -1
  18. package/src/components/ReviewOrder/index.tsx +2 -1
  19. package/src/components/ReviewProducts/index.tsx +11 -0
  20. package/src/components/SignupForm/index.tsx +145 -61
  21. package/src/components/SingleProductCard/index.tsx +16 -4
  22. package/src/components/SingleProductReview/index.tsx +1 -1
  23. package/src/components/StripeMethodForm/index.tsx +22 -24
  24. package/src/components/UpsellingProducts/index.tsx +1 -1
  25. package/src/components/UserProfileForm/index.tsx +63 -6
  26. package/src/components/UserProfileForm/styles.tsx +8 -0
  27. package/src/components/VerifyPhone/styles.tsx +1 -2
  28. package/src/components/shared/OModal.tsx +1 -1
  29. package/src/hooks/useCountdownTimer.tsx +26 -0
  30. package/src/navigators/CheckoutNavigator.tsx +6 -0
  31. package/src/navigators/HomeNavigator.tsx +12 -0
  32. package/src/pages/BusinessesListing.tsx +7 -6
  33. package/src/pages/MultiCheckout.tsx +31 -0
  34. package/src/pages/MultiOrdersDetails.tsx +27 -0
  35. package/src/pages/OrderDetails.tsx +1 -1
  36. package/src/pages/ReviewDriver.tsx +2 -2
  37. package/src/pages/ReviewOrder.tsx +2 -2
  38. package/src/pages/Sessions.tsx +22 -0
  39. package/src/theme.json +0 -1
  40. package/src/types/index.tsx +18 -11
  41. package/src/utils/index.tsx +68 -1
  42. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +103 -15
  43. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -0
  44. package/themes/business/src/components/Chat/index.tsx +42 -90
  45. package/themes/business/src/components/DriverMap/index.tsx +6 -5
  46. package/themes/business/src/components/LoginForm/index.tsx +89 -2
  47. package/themes/business/src/components/LoginForm/styles.tsx +6 -0
  48. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  49. package/themes/business/src/components/NewOrderNotification/index.tsx +26 -13
  50. package/themes/business/src/components/OrderDetails/Business.tsx +2 -2
  51. package/themes/business/src/components/OrderDetails/Delivery.tsx +28 -11
  52. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +14 -7
  53. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +6 -0
  54. package/themes/business/src/components/OrdersListManager/index.tsx +1 -1
  55. package/themes/business/src/components/OrdersOption/index.tsx +8 -4
  56. package/themes/business/src/components/PreviousOrders/index.tsx +7 -7
  57. package/themes/business/src/components/ProductItemAccordion/index.tsx +2 -2
  58. package/themes/business/src/components/UserFormDetails/index.tsx +5 -2
  59. package/themes/business/src/components/UserProfileForm/index.tsx +2 -0
  60. package/themes/business/src/components/shared/OModal.tsx +1 -1
  61. package/themes/business/src/types/index.tsx +8 -2
  62. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  63. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  64. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  65. package/themes/kiosk/src/components/BusinessMenu/index.tsx +39 -28
  66. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -3
  67. package/themes/kiosk/src/components/Cart/index.tsx +11 -12
  68. package/themes/kiosk/src/components/CartBottomSheet/index.tsx +9 -2
  69. package/themes/kiosk/src/components/CartContent/index.tsx +0 -11
  70. package/themes/kiosk/src/components/CartItem/index.tsx +4 -3
  71. package/themes/kiosk/src/components/CategoriesMenu/index.tsx +107 -62
  72. package/themes/kiosk/src/components/Checkout/index.tsx +40 -22
  73. package/themes/kiosk/src/components/CustomerName/index.tsx +0 -6
  74. package/themes/kiosk/src/components/DrawerView/index.tsx +1 -0
  75. package/themes/kiosk/src/components/DrawerView/styles.tsx +2 -2
  76. package/themes/kiosk/src/components/NavBar/index.tsx +29 -20
  77. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  78. package/themes/kiosk/src/components/OrderDetails/index.tsx +32 -27
  79. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +9 -11
  80. package/themes/kiosk/src/components/PaymentOptions/index.tsx +56 -54
  81. package/themes/kiosk/src/components/ProductForm/index.tsx +7 -8
  82. package/themes/kiosk/src/components/ProductItemAccordion/index.tsx +2 -2
  83. package/themes/kiosk/src/components/ProductOption/index.tsx +1 -1
  84. package/themes/kiosk/src/components/ProductOptionSubOption/index.tsx +3 -1
  85. package/themes/kiosk/src/components/UpsellingProducts/index.tsx +16 -5
  86. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  87. package/themes/kiosk/src/types/index.d.ts +1 -0
  88. package/themes/original/index.tsx +30 -8
  89. package/themes/original/src/components/ActiveOrders/index.tsx +15 -132
  90. package/themes/original/src/components/ActiveOrders/styles.tsx +0 -54
  91. package/themes/original/src/components/AddressForm/index.tsx +7 -6
  92. package/themes/original/src/components/AddressList/index.tsx +30 -18
  93. package/themes/original/src/components/AppleLogin/index.tsx +6 -8
  94. package/themes/original/src/components/BusinessBasicInformation/index.tsx +305 -159
  95. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +6 -2
  96. package/themes/original/src/components/BusinessController/index.tsx +168 -96
  97. package/themes/original/src/components/BusinessController/styles.tsx +5 -0
  98. package/themes/original/src/components/BusinessItemAccordion/index.tsx +8 -5
  99. package/themes/original/src/components/BusinessItemAccordion/styles.tsx +3 -1
  100. package/themes/original/src/components/BusinessListingSearch/index.tsx +231 -63
  101. package/themes/original/src/components/BusinessListingSearch/styles.tsx +22 -2
  102. package/themes/original/src/components/BusinessPreorder/index.tsx +1 -1
  103. package/themes/original/src/components/BusinessProductsCategories/index.tsx +2 -2
  104. package/themes/original/src/components/BusinessProductsList/CategoryDescription/index.tsx +44 -0
  105. package/themes/original/src/components/BusinessProductsList/index.tsx +51 -52
  106. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  107. package/themes/original/src/components/BusinessProductsListing/index.tsx +318 -155
  108. package/themes/original/src/components/BusinessProductsListing/styles.tsx +32 -0
  109. package/themes/original/src/components/BusinessReviews/index.tsx +6 -1
  110. package/themes/original/src/components/BusinessTypeFilter/index.tsx +106 -39
  111. package/themes/original/src/components/BusinessTypeFilter/styles.tsx +2 -0
  112. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +560 -0
  113. package/themes/original/src/components/BusinessesListing/{styles.tsx → Layout/Appointment/styles.tsx} +24 -2
  114. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +679 -0
  115. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +137 -0
  116. package/themes/original/src/components/BusinessesListing/index.tsx +99 -458
  117. package/themes/original/src/components/Cart/index.tsx +61 -42
  118. package/themes/original/src/components/Checkout/index.tsx +90 -39
  119. package/themes/original/src/components/DriverTips/index.tsx +17 -12
  120. package/themes/original/src/components/Favorite/index.tsx +92 -0
  121. package/themes/original/src/components/Favorite/styles.tsx +22 -0
  122. package/themes/original/src/components/FavoriteList/index.tsx +298 -0
  123. package/themes/original/src/components/FavoriteList/styles.tsx +5 -0
  124. package/themes/original/src/components/ForgotPasswordForm/index.tsx +84 -4
  125. package/themes/original/src/components/GPSButton/index.tsx +15 -8
  126. package/themes/original/src/components/GoogleMap/index.tsx +11 -11
  127. package/themes/original/src/components/Help/index.tsx +21 -4
  128. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +18 -1
  129. package/themes/original/src/components/LastOrders/index.tsx +12 -1
  130. package/themes/original/src/components/LoginForm/Otp/index.tsx +91 -0
  131. package/themes/original/src/components/LoginForm/Otp/styles.tsx +7 -0
  132. package/themes/original/src/components/LoginForm/index.tsx +332 -164
  133. package/themes/original/src/components/LoginForm/styles.tsx +1 -3
  134. package/themes/original/src/components/MessageListing/index.tsx +10 -1
  135. package/themes/original/src/components/Messages/index.tsx +1 -1
  136. package/themes/original/src/components/MomentOption/index.tsx +10 -1
  137. package/themes/original/src/components/MomentOption/styles.tsx +1 -1
  138. package/themes/original/src/components/MomentSelector/index.tsx +197 -0
  139. package/themes/original/src/components/MomentSelector/styles.tsx +6 -0
  140. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +243 -0
  141. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/styles.tsx +46 -0
  142. package/themes/original/src/components/MultiCheckout/index.tsx +298 -0
  143. package/themes/original/src/components/MultiCheckout/styles.tsx +59 -0
  144. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +372 -0
  145. package/themes/original/src/components/MultiOrdersDetails/index.tsx +258 -0
  146. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +50 -0
  147. package/themes/original/src/components/MyOrders/index.tsx +120 -32
  148. package/themes/original/src/components/MyOrders/styles.tsx +8 -1
  149. package/themes/original/src/components/NavBar/index.tsx +4 -4
  150. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +167 -0
  151. package/themes/original/src/components/OrderDetails/index.tsx +150 -64
  152. package/themes/original/src/components/OrderDetails/styles.tsx +1 -2
  153. package/themes/original/src/components/OrderSummary/index.tsx +6 -6
  154. package/themes/original/src/components/OrderTypeSelector/index.tsx +79 -35
  155. package/themes/original/src/components/OrderTypeSelector/styles.tsx +19 -1
  156. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +153 -0
  157. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/styles.tsx +6 -0
  158. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +53 -0
  159. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/styles.tsx +6 -0
  160. package/themes/original/src/components/OrdersOption/index.tsx +137 -38
  161. package/themes/original/src/components/OrdersOption/styles.tsx +4 -1
  162. package/themes/original/src/components/PaymentOptionCash/index.tsx +2 -2
  163. package/themes/original/src/components/PaymentOptionWallet/index.tsx +17 -23
  164. package/themes/original/src/components/PaymentOptionWallet/styles.tsx +1 -1
  165. package/themes/original/src/components/PaymentOptions/index.tsx +58 -37
  166. package/themes/original/src/components/PhoneInputNumber/index.tsx +5 -11
  167. package/themes/original/src/components/PreviousOrders/index.tsx +18 -147
  168. package/themes/original/src/components/ProductForm/index.tsx +718 -679
  169. package/themes/original/src/components/ProductForm/styles.tsx +6 -2
  170. package/themes/original/src/components/ProductItemAccordion/index.tsx +2 -2
  171. package/themes/original/src/components/ProductOption/index.tsx +1 -1
  172. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -12
  173. package/themes/original/src/components/ProfessionalFilter/index.tsx +128 -0
  174. package/themes/original/src/components/ProfessionalFilter/styles.tsx +0 -0
  175. package/themes/original/src/components/ProfessionalProfile/index.tsx +298 -0
  176. package/themes/original/src/components/ProfessionalProfile/styles.tsx +46 -0
  177. package/themes/original/src/components/Promotions/index.tsx +151 -133
  178. package/themes/original/src/components/Promotions/styles.tsx +3 -23
  179. package/themes/original/src/components/ReviewDriver/index.tsx +6 -6
  180. package/themes/original/src/components/ReviewOrder/index.tsx +1 -1
  181. package/themes/original/src/components/ReviewTrigger/index.tsx +118 -0
  182. package/themes/original/src/components/ReviewTrigger/styles.tsx +34 -0
  183. package/themes/original/src/components/SearchBar/index.tsx +13 -5
  184. package/themes/original/src/components/ServiceForm/index.tsx +579 -0
  185. package/themes/original/src/components/ServiceForm/styles.tsx +50 -0
  186. package/themes/original/src/components/Sessions/index.tsx +160 -0
  187. package/themes/original/src/components/Sessions/styles.tsx +15 -0
  188. package/themes/original/src/components/SignupForm/index.tsx +237 -126
  189. package/themes/original/src/components/SingleOrderCard/index.tsx +275 -0
  190. package/themes/original/src/components/SingleOrderCard/styles.tsx +54 -0
  191. package/themes/original/src/components/SingleProductCard/index.tsx +161 -88
  192. package/themes/original/src/components/SingleProductCard/styles.tsx +2 -2
  193. package/themes/original/src/components/StripeElementsForm/index.tsx +16 -8
  194. package/themes/original/src/components/StripeElementsForm/naked.tsx +2 -2
  195. package/themes/original/src/components/UpsellingProducts/index.tsx +86 -74
  196. package/themes/original/src/components/UserDetails/index.tsx +15 -81
  197. package/themes/original/src/components/UserFormDetails/index.tsx +98 -66
  198. package/themes/original/src/components/UserProfile/index.tsx +11 -2
  199. package/themes/original/src/components/UserProfileForm/index.tsx +33 -22
  200. package/themes/original/src/components/UserVerification/index.tsx +178 -192
  201. package/themes/original/src/components/VerifyPhone/index.tsx +10 -7
  202. package/themes/original/src/components/VerifyPhone/styles.tsx +2 -1
  203. package/themes/original/src/components/Wallets/index.tsx +76 -9
  204. package/themes/original/src/components/Wallets/styles.tsx +21 -0
  205. package/themes/original/src/components/shared/OBottomPopup.tsx +44 -13
  206. package/themes/original/src/components/shared/OButton.tsx +2 -0
  207. package/themes/original/src/components/shared/OInput.tsx +3 -2
  208. package/themes/original/src/components/shared/OModal.tsx +4 -2
  209. package/themes/original/src/layouts/FloatingBottomContainer.tsx +5 -1
  210. package/themes/original/src/types/index.tsx +187 -35
  211. package/themes/original/src/utils/index.tsx +96 -2
  212. package/themes/single-business/src/components/OrderTypeSelector/index.tsx +1 -1
  213. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,6 +1,6 @@
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
6
  import { OButton, OIcon, OModal, OText } from '../shared'
@@ -22,15 +22,21 @@ import {
22
22
  ProgressContentWrapper,
23
23
  ProgressBar,
24
24
  TagsContainer,
25
- SortContainer
25
+ SortContainer,
26
+ BrandContainer,
27
+ BrandItem,
28
+ PriceFilterWrapper,
29
+ OptionTitle
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'
35
+ import { MyOrders } from '../MyOrders'
36
+ import { useIsFocused } from '@react-navigation/native';
31
37
 
32
- export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
33
38
 
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,11 +75,26 @@ 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
  },
@@ -84,6 +111,12 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
84
111
  flexWrap: 'wrap',
85
112
  justifyContent: 'center'
86
113
  },
114
+ priceContainer: {
115
+ width: '100%',
116
+ flexDirection: 'row',
117
+ flexWrap: 'wrap',
118
+ justifyContent: 'space-between'
119
+ },
87
120
  categoryStyle: {
88
121
  marginRight: 10,
89
122
  marginTop: 10,
@@ -95,6 +128,16 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
95
128
  height: 28,
96
129
  borderWidth: 0
97
130
  },
131
+ priceItem: {
132
+ marginRight: 10,
133
+ marginTop: 10,
134
+ borderRadius: 50,
135
+ paddingVertical: 4,
136
+ paddingLeft: 5,
137
+ paddingRight: 5,
138
+ height: 27,
139
+ borderWidth: 0
140
+ },
98
141
  applyButton: {
99
142
  paddingHorizontal: 40,
100
143
  width: '100%',
@@ -107,7 +150,7 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
107
150
  }
108
151
 
109
152
  const handleCloseFilters = () => {
110
- setFilters({ business_types: [], orderBy: 'default' })
153
+ setFilters({ business_types: [], orderBy: 'default', franchise_ids: [], price_level: null })
111
154
  setOpenFilters(false)
112
155
  }
113
156
 
@@ -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,6 +220,11 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
141
220
  handleSearchbusinessAndProducts(true)
142
221
  }, [])
143
222
 
223
+
224
+ useEffect(() => {
225
+ handleChangeTermValue('')
226
+ }, [isFocused])
227
+
144
228
  const MaxSectionItem = ({ title, options, filter }: any) => {
145
229
  const parseValue = (option: number) => {
146
230
  return filter === 'max_distance'
@@ -176,12 +260,63 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
176
260
  )
177
261
  }
178
262
 
263
+ const BusinessControllerSkeletons = () => {
264
+ return (
265
+ <>
266
+ {[
267
+ ...Array(
268
+ paginationProps.nextPageItems
269
+ ? paginationProps.nextPageItems
270
+ : 3,
271
+ ).keys(),
272
+ ].map((item, i) => (
273
+ <Placeholder
274
+ Animation={Fade}
275
+ key={i}
276
+ style={{ width: 320, marginRight: 20, marginTop: 20 }}>
277
+ <View style={{ width: 320 }}>
278
+ <PlaceholderLine
279
+ height={155}
280
+ style={{ marginBottom: 20, borderRadius: 25 }}
281
+ />
282
+ <View style={{ paddingHorizontal: 10 }}>
283
+ <View
284
+ style={{
285
+ flexDirection: 'row',
286
+ justifyContent: 'space-between',
287
+ }}>
288
+ <PlaceholderLine
289
+ height={25}
290
+ width={40}
291
+ style={{ marginBottom: 10 }}
292
+ />
293
+ <PlaceholderLine
294
+ height={25}
295
+ width={20}
296
+ style={{ marginBottom: 10 }}
297
+ />
298
+ </View>
299
+ <PlaceholderLine
300
+ height={20}
301
+ width={30}
302
+ style={{ marginBottom: 10 }}
303
+ />
304
+ <PlaceholderLine
305
+ height={20}
306
+ width={80}
307
+ style={{ marginBottom: 0 }}
308
+ />
309
+ </View>
310
+ </View>
311
+ </Placeholder>
312
+ ))}
313
+ </>
314
+ )
315
+ }
316
+
179
317
  return (
180
318
  <ScrollView style={styles.container}>
181
319
  <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
320
  <OText
186
321
  size={20}
187
322
  mBottom={15}
@@ -193,6 +328,7 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
193
328
  </WrapHeader>
194
329
  <SearchWrapper>
195
330
  <SearchBar
331
+ autoFocus
196
332
  lazyLoad
197
333
  inputStyle={{ ...styles.searchInput, ...Platform.OS === 'ios' ? {} : { paddingBottom: 4 } }}
198
334
  placeholder={`${t('SEARCH_BUSINESSES', 'Search Businesses')} / ${t('TYPE_AT_LEAST_3_CHARACTERS', 'type at least 3 characters')}`}
@@ -211,6 +347,20 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
211
347
  </View>
212
348
  )
213
349
  }
350
+ {businessesSearchList.businesses?.length > 0 && (
351
+ <MyOrders
352
+ hideOrders
353
+ businessesSearchList={businessesSearchList}
354
+ onNavigationRedirect={onNavigationRedirect}
355
+ BusinessControllerSkeletons={BusinessControllerSkeletons}
356
+ />
357
+ )}
358
+
359
+ <OptionTitle isBusinessesSearchList={!!businessesSearchList}>
360
+ <OText size={16} lineHeight={24} weight={'500'} color={theme.colors.textNormal} mBottom={10}>
361
+ {t('BUSINESSES', 'Businesses')}
362
+ </OText>
363
+ </OptionTitle>
214
364
  <ScrollView horizontal>
215
365
  {businessesSearchList.businesses?.length > 0 && businessesSearchList.businesses.map((business: any, i: number) => (
216
366
  <BusinessController
@@ -218,8 +368,9 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
218
368
  business={business}
219
369
  isBusinessOpen={business.open}
220
370
  handleCustomClick={() => onBusinessClick(business)}
371
+ handleUpdateBusinessList={handleUpdateBusinessList}
221
372
  orderType={orderState?.options?.type}
222
- style={{ width: 320, marginRight: (businessesSearchList.loading || i !== businessesSearchList.businesses?.length - 1) ? 20 : 0 }}
373
+ style={{ width: screenWidth - 80, marginRight: (businessesSearchList.loading || i !== businessesSearchList.businesses?.length - 1) ? 20 : 0 }}
223
374
  />
224
375
  ))}
225
376
  {!businessesSearchList.loading && paginationProps?.totalPages && paginationProps?.currentPage < paginationProps?.totalPages && (
@@ -234,55 +385,7 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
234
385
  </LoadMoreBusinessContainer>
235
386
  )}
236
387
  {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
- </>
388
+ <BusinessControllerSkeletons />
286
389
  )}
287
390
  </ScrollView>
288
391
  <ProductsList>
@@ -336,9 +439,10 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
336
439
  isSoldOut={(product.inventoried && !product.quantity)}
337
440
  product={product}
338
441
  businessId={business?.id}
339
- onProductClick={() => { }}
442
+ onProductClick={(product: any) => onProductClick(business, category?.id, product?.id)}
340
443
  productAddedToCartLength={0}
341
- style={{ width: 320, marginRight: i === category?.products?.length - 1 ? 0 : 20 }}
444
+ handleUpdateProducts={(productId: number, changes: any) => handleUpdateProducts(productId, category?.id, business?.id, changes)}
445
+ style={{ width: screenWidth - 80, marginRight: i === category?.products?.length - 1 ? 0 : 20 }}
342
446
  />
343
447
  )))}
344
448
 
@@ -388,7 +492,7 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
388
492
  onCancel={() => handleCloseFilters()}
389
493
  onClose={() => handleCloseFilters()}
390
494
  >
391
- <ScrollView style={styles.container}>
495
+ <ScrollView style={styles.filterContainer}>
392
496
  <OText
393
497
  size={20}
394
498
  mBottom={15}
@@ -406,7 +510,7 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
406
510
  onPress={() => handleChangeFilters('orderBy', item?.value)}
407
511
  style={{ marginBottom: 7 }}
408
512
  >
409
- <OText
513
+ <OText
410
514
  weight={filters?.orderBy?.includes(item?.value) ? 'bold' : '500'}
411
515
  mBottom={filters?.orderBy?.includes(item?.value) ? 5 : 0}
412
516
  >
@@ -415,6 +519,70 @@ export const BusinessListingSearchUI = (props : BusinessSearchParams) => {
415
519
  </TouchableOpacity>
416
520
  ))}
417
521
  </SortContainer>
522
+ <BrandContainer>
523
+ <OText
524
+ size={16}
525
+ weight='bold'
526
+ lineHeight={24}
527
+ style={{ marginBottom: 10 }}
528
+ >
529
+ {t('BRANDS', 'Brands')}
530
+ </OText>
531
+ {!brandList?.loading && !brandList?.error && brandList?.brands?.length > 0 && (
532
+ <ScrollView
533
+ style={{ maxHeight: 300, marginBottom: 10 }}
534
+ showsVerticalScrollIndicator={true}
535
+ nestedScrollEnabled={true}
536
+ >
537
+ {brandList?.brands.map((brand: any, i: number) => brand?.enabled && (
538
+ <BrandItem
539
+ key={i}
540
+ onPress={() => handleChangeBrandFilter(brand?.id)}
541
+ >
542
+ <OText
543
+ size={14}
544
+ weight={'400'}
545
+ lineHeight={24}
546
+ >
547
+ {brand?.name}
548
+ </OText>
549
+ {filters?.franchise_ids?.includes(brand?.id) && (
550
+ <AntDesignIcon
551
+ name='check'
552
+ color={theme.colors.success500}
553
+ size={16}
554
+ />
555
+ )}
556
+ </BrandItem>
557
+ ))}
558
+ </ScrollView>
559
+ )}
560
+ {!brandList?.loading && ((brandList?.brands?.filter((brand: any) => brand?.enabled))?.length === 0) && (
561
+ <OText size={14} weight='400'>{t('NO_RESULTS_FOUND', 'Sorry, no results found')}</OText>
562
+ )}
563
+ </BrandContainer>
564
+ <PriceFilterWrapper>
565
+ <OText
566
+ size={16}
567
+ weight='bold'
568
+ lineHeight={24}
569
+ style={{ marginBottom: 5 }}
570
+ >
571
+ {t('PRICE_RANGE', 'Price range')}
572
+ </OText>
573
+ <View style={styles.priceContainer}>
574
+ {priceList.map((price: any, i: number) => (
575
+ <OButton
576
+ key={i}
577
+ bgColor={(filters?.price_level === price?.level) ? theme.colors.primary : theme.colors.backgroundGray200}
578
+ onClick={() => handleChangePriceRange(price?.level)}
579
+ text={`${price.content} ${(filters?.price_level === price?.level) ? ' X' : ''}`}
580
+ style={styles.priceItem}
581
+ textStyle={{ fontSize: 10, color: (filters?.price_level === price?.level) ? theme.colors.backgroundLight : theme.colors.textNormal }}
582
+ />
583
+ ))}
584
+ </View>
585
+ </PriceFilterWrapper>
418
586
  {orderState?.options?.type === 1 && (
419
587
  <MaxSectionItem
420
588
  title={t('MAX_DELIVERY_FEE', 'Max delivery fee')}
@@ -1,4 +1,4 @@
1
- import styled from 'styled-components/native'
1
+ import styled, { css } from 'styled-components/native'
2
2
 
3
3
  export const WrapHeader = styled.View`
4
4
  width: 100%;
@@ -68,9 +68,29 @@ export const ProgressContentWrapper = styled.View`
68
68
  `
69
69
 
70
70
  export const TagsContainer = styled.View`
71
-
71
+ padding-bottom: 10px;
72
72
  `
73
73
 
74
74
  export const SortContainer = styled.View`
75
75
  margin-bottom: 10px;
76
76
  `
77
+
78
+ export const BrandContainer = styled.View``
79
+
80
+ export const BrandItem = styled.TouchableOpacity`
81
+ flex-direction: row;
82
+ justify-content: space-between;
83
+ margin-bottom: 4px;
84
+ align-items: center;
85
+ `
86
+
87
+ export const PriceFilterWrapper = styled.View`
88
+ margin-bottom: 20px;
89
+ `
90
+
91
+ export const OptionTitle = styled.View`
92
+ margin-top: 24px;
93
+ ${(props: any) => props.titleContent && css`
94
+ margin-left: ${() => props.isBusinessesSearchList ? '0' : '40px'};
95
+ `}
96
+ `
@@ -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)