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
@@ -20,6 +20,9 @@ export interface LoginParams {
20
20
  passwordInputIcon?: any;
21
21
  allowedLevels?: any;
22
22
  useRootPoint?: any;
23
+ notificationState?: any;
24
+ handleReCaptcha?: any;
25
+ enableReCaptcha?: any;
23
26
  }
24
27
  export interface ProfileParams {
25
28
  navigation?: any;
@@ -38,6 +41,7 @@ export interface ProfileParams {
38
41
  validationFields?: any;
39
42
  showField?: any;
40
43
  isRequiredField?: any;
44
+ isAlsea?: boolean;
41
45
  }
42
46
 
43
47
  export interface AddressListParams {
@@ -289,7 +293,8 @@ export interface OrdersOptionParams {
289
293
  handleClickLogisticOrder: (status: number, orderId: number) => void,
290
294
  logisticOrders: {orders: Array<any>, loading: boolean, error: Array<string> | string},
291
295
  loadLogisticOrders: () => void;
292
- isLogisticActivated?: boolean
296
+ isLogisticActivated?: boolean;
297
+ isAlsea?: boolean;
293
298
  }
294
299
  export interface ActiveOrdersParams {
295
300
  orders?: any;
@@ -373,6 +378,7 @@ export interface OrderDetailsParams {
373
378
  handleClickLogisticOrder?: (status: number, orderId: number) => void;
374
379
  orderTitle?: any;
375
380
  forceUpdate?: number;
381
+ getPermissions?: any
376
382
  }
377
383
  export interface ProductItemAccordionParams {
378
384
  isCartPending?: boolean;
@@ -578,4 +584,4 @@ export interface ReviewCustomerParams {
578
584
 
579
585
  export interface NoNetworkParams {
580
586
  image?: any;
581
- }
587
+ }
@@ -197,7 +197,7 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
197
197
  {isFarAway && (
198
198
  <FarAwayMessage style={styles.farAwayMsg}>
199
199
  <Ionicons name='md-warning-outline' style={styles.iconStyle} />
200
- <OText size={12} numberOfLines={1} ellipsizeMode={'tail'} color={theme.colors.textNormal}>{t('YOU_ARE_FAR_FROM_ADDRESS', 'You are far from this address')}</OText>
200
+ <OText size={12} numberOfLines={1} ellipsizeMode={'tail'} color={theme.colors.textNormal}>{t('YOU_ARE_FAR_FROM_ADDRESS', 'Your are far from this address')}</OText>
201
201
  </FarAwayMessage>
202
202
  )}
203
203
  {!auth && (
@@ -410,8 +410,7 @@ const LoginFormUI = (props: LoginParams) => {
410
410
  textInputProps={{
411
411
  returnKeyType: 'next',
412
412
  onSubmitEditing: () => inputRef?.current?.focus?.(),
413
- style: { borderWidth: 0, fontSize: 12 },
414
- maxLength: 10
413
+ style: { borderWidth: 0, fontSize: 12 }
415
414
  }}
416
415
  textWrapStyle={{ borderColor: theme.colors.clear, borderWidth: 0, height: 40, paddingStart: 0 }}
417
416
  />
@@ -155,7 +155,7 @@ const BusinessesListingUI = (props: BusinessesListingParams) => {
155
155
  {isFarAway && (
156
156
  <FarAwayMessage style={styles.farAwayMsg}>
157
157
  <Ionicons name='md-warning-outline' style={styles.iconStyle} />
158
- <OText size={12} numberOfLines={1} ellipsizeMode={'tail'} color={theme.colors.textNormal}>{t('YOU_ARE_FAR_FROM_ADDRESS', 'You are far from this address')}</OText>
158
+ <OText size={12} numberOfLines={1} ellipsizeMode={'tail'} color={theme.colors.textNormal}>{t('YOU_ARE_FAR_FROM_ADDRESS', 'Your are far from this address')}</OText>
159
159
  </FarAwayMessage>
160
160
  )}
161
161
  <View style={styles.wrapperOrderOptions}>
@@ -1,5 +1,5 @@
1
1
  import React, { useCallback, useEffect, useRef, useState } from 'react';
2
- import { PanResponder, TouchableOpacity, View } from 'react-native';
2
+ import { PanResponder, Platform, TouchableOpacity, View } from 'react-native';
3
3
  import {
4
4
  useLanguage,
5
5
  useOrder,
@@ -40,7 +40,7 @@ const BusinessMenu = (props:any): React.ReactElement => {
40
40
  const clearCartWhenTimeOut = () => {
41
41
  if (cart?.uuid) clearCart(cart?.uuid)
42
42
  }
43
- const timerId = useRef(false);
43
+ const timerId: any = useRef(false);
44
44
 
45
45
  const clearInactivityTimeout = () =>{
46
46
  clearTimeout(timerId.current);
@@ -93,6 +93,17 @@ const BusinessMenu = (props:any): React.ReactElement => {
93
93
  else showCartBottomSheet();
94
94
  }
95
95
 
96
+ const handleRedirect = () => {
97
+ navigation.navigate('DeliveryType', {
98
+ callback: () => {
99
+ navigation.navigate('Business');
100
+ },
101
+ goBack: () => {
102
+ navigation.goBack();
103
+ },
104
+ });
105
+ };
106
+
96
107
  return (
97
108
  <View style={{
98
109
  flex: 1,
@@ -109,31 +120,31 @@ const BusinessMenu = (props:any): React.ReactElement => {
109
120
  }}
110
121
  >
111
122
  <Container nopadding nestedScrollEnabled>
112
- <View style={{ paddingTop: 20 }}>
113
- <NavBar
114
- title={t('MENU_V21', 'Menu')}
115
- onActionLeft={goToBack}
116
- includeOrderTypeSelector
117
- rightComponent={cart && (
118
- <TouchableOpacity
119
- style={{ paddingHorizontal: 20, flexDirection: 'row', alignItems: 'center' }}
120
- onPress={onToggleCart}
123
+ {Platform.OS === 'android' && (<View style={{ paddingTop: 20 }} />)}
124
+ <NavBar
125
+ title={t('MENU_V21', 'Menu')}
126
+ onActionLeft={goToBack}
127
+ includeOrderTypeSelector
128
+ onClickTypes={handleRedirect}
129
+ rightComponent={cart && (
130
+ <TouchableOpacity
131
+ style={{ flexDirection: 'row', alignItems: 'center' }}
132
+ onPress={onToggleCart}
133
+ >
134
+ <OText
135
+ color={theme.colors.mediumGray}
121
136
  >
122
- <OText
123
- color={theme.colors.mediumGray}
124
- >
125
- {`${cart?.products?.length || 0} ${t('ITEMS', 'items')}`} {parsePrice(cart?.total || 0)} {' '}
126
- </OText>
127
-
128
- <MaterialIcon
129
- name={bottomSheetVisibility ? "cart-off" : "cart-outline"}
130
- color={theme.colors.primary}
131
- size={30}
132
- />
133
- </TouchableOpacity>
134
- )}
135
- />
136
- </View>
137
+ {`${cart?.products?.length || 0} ${t('ITEMS', 'items')}`} {parsePrice(cart?.total || 0)} {' '}
138
+ </OText>
139
+
140
+ <MaterialIcon
141
+ name={bottomSheetVisibility ? "cart-off" : "cart-outline"}
142
+ color={theme.colors.primary}
143
+ size={30}
144
+ />
145
+ </TouchableOpacity>
146
+ )}
147
+ />
137
148
 
138
149
  <BusinessProductsListing
139
150
  { ...businessProductsListingProps }
@@ -144,7 +155,7 @@ const BusinessMenu = (props:any): React.ReactElement => {
144
155
  </Container>
145
156
  </View>
146
157
 
147
- <View
158
+ {/* <View
148
159
  style={{
149
160
  flex: bottomSheetVisibility && orientationState?.orientation === PORTRAIT ? 0 : 0.8,
150
161
  display: bottomSheetVisibility ? 'flex' : 'none'
@@ -155,7 +166,7 @@ const BusinessMenu = (props:any): React.ReactElement => {
155
166
  resetInactivityTimeout={resetInactivityTimeout}
156
167
  clearInactivityTimeout={clearInactivityTimeout}
157
168
  />
158
- </View>
169
+ </View> */}
159
170
  </View>
160
171
  );
161
172
  };
@@ -1,5 +1,5 @@
1
- import React, { useEffect, useState } from 'react';
2
- import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder';
1
+ import React from 'react';
2
+ import { PlaceholderLine } from 'rn-placeholder';
3
3
  import { View, ScrollView, Platform } from 'react-native';
4
4
  import { useTheme } from 'styled-components/native';
5
5
  import { useDeviceOrientation } from '../../../../../src/hooks/DeviceOrientation';
@@ -21,7 +21,6 @@ const BusinessesListingUI = (props: any) => {
21
21
  navigation,
22
22
  businessesList,
23
23
  handleBusinessClick,
24
- paginationProps,
25
24
  } = props;
26
25
 
27
26
  const theme = useTheme();
@@ -110,7 +110,6 @@ const CartUI = (props: any) => {
110
110
  <NavBar
111
111
  title={t('CONFIRM_YOUR_ORDER', 'Confirm your order')}
112
112
  onActionLeft={goToBack}
113
- style={{ height: orientationState?.dimensions?.height * 0.08 }}
114
113
  btnStyle={{ paddingLeft: 0 }}
115
114
  rightComponent={(
116
115
  <OButton
@@ -238,8 +237,8 @@ const CartUI = (props: any) => {
238
237
  </OSTable>
239
238
  )}
240
239
  {
241
- cart?.offers?.length > 0 && cart?.offers?.filter((offer: any) => offer?.target === 1)?.map((offer: any) => (
242
- <OSTable key={offer.id}>
240
+ cart?.offers?.length > 0 && cart?.offers?.filter((offer: any) => offer?.target === 1)?.map((offer: any, i: number) => (
241
+ <OSTable key={`${offer?.id}_${i}`}>
243
242
  <OSRow>
244
243
  <OText>{offer.name}</OText>
245
244
  {offer.rate_type === 1 && (
@@ -263,8 +262,8 @@ const CartUI = (props: any) => {
263
262
  </OSTable>
264
263
  )}
265
264
  {
266
- cart.taxes?.length > 0 && cart.taxes.filter((tax: any) => tax.type === 2 && tax?.rate !== 0).map((tax: any) => (
267
- <OSTable key={tax.id}>
265
+ cart.taxes?.length > 0 && cart.taxes.filter((tax: any) => tax.type === 2 && tax?.rate !== 0).map((tax: any, i: number) => (
266
+ <OSTable key={`${tax?.id}_${i}`}>
268
267
  <OSRow>
269
268
  <OText>
270
269
  {tax.name || t('INHERIT_FROM_BUSINESS', 'Inherit from business')}{' '}
@@ -276,12 +275,12 @@ const CartUI = (props: any) => {
276
275
  ))
277
276
  }
278
277
  {
279
- cart?.fees?.length > 0 && cart?.fees?.filter((fee: any) => !(fee.fixed === 0 && fee.percentage === 0)).map((fee: any) => (
280
- <OSTable key={fee?.id}>
278
+ cart?.fees?.length > 0 && cart?.fees?.filter((fee: any) => !(fee.fixed === 0 && fee.percentage === 0)).map((fee: any, i: number) => (
279
+ <OSTable key={`${fee?.id}_${i}`}>
281
280
  <OSRow>
282
281
  <OText>
283
282
  {fee.name || t('INHERIT_FROM_BUSINESS', 'Inherit from business')}{' '}
284
- ({fee?.fixed > 0 && `${parsePrice(fee?.fixed)} + `}{fee.percentage}%){' '}
283
+ ({fee?.fixed > 0 && `${parsePrice(fee?.fixed)}${fee.percentage > 0 ? ' + ' : ''}`}{fee.percentage > 0 && `${fee.percentage}%`}){' '}
285
284
  </OText>
286
285
  </OSRow>
287
286
  <OText>{parsePrice(fee?.summary?.fixed + (fee?.summary?.percentage_after_discount ?? fee?.summary?.percentage) ?? 0)}</OText>
@@ -289,8 +288,8 @@ const CartUI = (props: any) => {
289
288
  ))
290
289
  }
291
290
  {
292
- cart?.offers?.length > 0 && cart?.offers?.filter((offer: any) => offer?.target === 3)?.map((offer: any) => (
293
- <OSTable key={offer.id}>
291
+ cart?.offers?.length > 0 && cart?.offers?.filter((offer: any) => offer?.target === 3)?.map((offer: any, i: number) => (
292
+ <OSTable key={`${offer?.id}_${i}`}>
294
293
  <OSRow>
295
294
  <OText>{offer.name}</OText>
296
295
  {offer.rate_type === 1 && (
@@ -310,8 +309,8 @@ const CartUI = (props: any) => {
310
309
  </OSTable>
311
310
  )}
312
311
  {
313
- cart?.offers?.length > 0 && cart?.offers?.filter((offer: any) => offer?.target === 2)?.map((offer: any) => (
314
- <OSTable key={offer.id}>
312
+ cart?.offers?.length > 0 && cart?.offers?.filter((offer: any) => offer?.target === 2)?.map((offer: any, i: number) => (
313
+ <OSTable key={`${offer?.id}_${i}`}>
315
314
  <OSRow>
316
315
  <OText>{offer.name}</OText>
317
316
  {offer.rate_type === 1 && (
@@ -62,6 +62,10 @@ const CartBottomSheetUI = (props: CartBottomSheetUIProps): React.ReactElement |
62
62
  }
63
63
 
64
64
  const handleEditProduct = (product: any) => {
65
+ if (props.onEditProduct) {
66
+ props.onEditProduct(product)
67
+ return
68
+ }
65
69
  setCurProduct(product)
66
70
  setModalIsOpen(true)
67
71
  }
@@ -148,7 +152,7 @@ const CartBottomSheetUI = (props: CartBottomSheetUIProps): React.ReactElement |
148
152
  <StyledBottomContent
149
153
  style={{bottom:10}}
150
154
  minHeight={props.height * 0.01}
151
- >
155
+ >
152
156
  <OButton
153
157
  text={(cart?.subtotal >= cart?.minimum || !cart?.minimum) && cart?.valid_address ? (
154
158
  !openUpselling !== canOpenUpselling ? `${t('CHECKOUT', 'Checkout')} ${parsePrice(cart?.total)}`: t('LOADING', 'Loading')
@@ -198,6 +202,7 @@ const CartBottomSheetUI = (props: CartBottomSheetUIProps): React.ReactElement |
198
202
  canOpenUpselling={canOpenUpselling}
199
203
  setCanOpenUpselling={setCanOpenUpselling}
200
204
  onClose={onCloseUpselling}
205
+ onAddProduct={props.onAddProduct}
201
206
  resetInactivityTimeout={resetInactivityTimeout}
202
207
  />
203
208
  )}
@@ -231,7 +236,7 @@ const TopBar = (props:any) => {
231
236
  <OIconButton
232
237
  bgColor="transparent"
233
238
  borderColor="transparent"
234
- RenderIcon={() =>
239
+ RenderIcon={() =>
235
240
  <EvilIcons
236
241
  name={'close'}
237
242
  size={40}
@@ -260,6 +265,8 @@ interface CartBottomSheetUIProps {
260
265
  onNavigationRedirect: any,
261
266
  clearInactivityTimeout: any,
262
267
  resetInactivityTimeout: any,
268
+ onEditProduct: any,
269
+ onAddProduct: any,
263
270
  }
264
271
 
265
272
  export const CartBottomSheet = (props: any) => {
@@ -1,10 +1,7 @@
1
1
  import React, { useEffect, useState } from 'react';
2
- import { useLanguage } from 'ordering-components/native';
3
2
  import { useCartBottomSheet } from '../../providers/CartBottomSheetProvider';
4
- import { CCNotCarts } from './styles';
5
3
 
6
4
  import { Cart } from '../Cart';
7
- import { OText } from '../shared';
8
5
  import Spinner from 'react-native-loading-spinner-overlay';
9
6
  import { Cart as TypeCart } from '../../types';
10
7
 
@@ -20,7 +17,6 @@ export const CartContent = (props: any) => {
20
17
  resetInactivityTimeout,
21
18
  }: Props = props
22
19
 
23
- const [, t] = useLanguage()
24
20
  const [isCartsLoading, setIsCartsLoading] = useState(false)
25
21
  const [, { hideCartBottomSheet }] = useCartBottomSheet();
26
22
 
@@ -56,13 +52,6 @@ export const CartContent = (props: any) => {
56
52
  }
57
53
  </>
58
54
  )}
59
- {/* {(!cart && showNotFound) && (
60
- <CCNotCarts>
61
- <OText size={24} style={{ textAlign: 'center' }}>
62
- {t('CARTS_NOT_FOUND', 'You don\'t have carts available')}
63
- </OText>
64
- </CCNotCarts>
65
- )} */}
66
55
  <Spinner visible={isCartsLoading} />
67
56
  </>
68
57
  )
@@ -56,9 +56,10 @@ const CartItem = (props: CartItemProps) => {
56
56
  return product
57
57
  }
58
58
  const isProductIngredients = productInfo()?.ingredients.length > 0 || productInfo()?.options.length > 0 || product?.comment
59
- const getFormattedSubOptionName = ({ quantity, name, position, price }: { quantity: number, name: string, position: string, price: number }) => {
59
+ const getFormattedSubOptionName = ({ quantity, name, position, price }: { quantity: number, name: string, position: string, price: any }) => {
60
60
  const pos = position ? `(${position})` : ''
61
- return `${quantity} x ${name} ${pos} +${price}`
61
+ const str = `${quantity} x ${name} ${pos}`
62
+ return price ? `${str} ${price}` : str
62
63
  }
63
64
 
64
65
  return (
@@ -184,7 +185,7 @@ const CartItem = (props: CartItemProps) => {
184
185
  quantity: suboption.quantity,
185
186
  name: suboption.name,
186
187
  position: (suboption.position !== 'whole') ? t(suboption.position.toUpperCase(), suboption.position) : '',
187
- price: parsePrice(suboption.price)
188
+ price: suboption.price > 0 && `+${parsePrice(suboption.price)}`
188
189
  })}
189
190
  </OText>
190
191
  </ProductSubOption>
@@ -1,4 +1,4 @@
1
- import React, { useEffect, useState } from 'react';
1
+ import React, { useCallback, useState } from 'react';
2
2
  import { Dimensions, Platform, View } from 'react-native';
3
3
  import { useLanguage, useOrder, useUtils } from 'ordering-components/native';
4
4
  import MaterialIcon from 'react-native-vector-icons/MaterialCommunityIcons'
@@ -12,6 +12,7 @@ import {
12
12
  OText
13
13
  } from '../../components/shared';
14
14
  import { CartBottomSheet } from '../../components/CartBottomSheet';
15
+ import { NotFoundSource } from '../NotFoundSource';
15
16
  import { Category } from '../../types';
16
17
  import { CartContent } from '../../components/CartContent';
17
18
  import { TouchableOpacity } from 'react-native-gesture-handler';
@@ -40,20 +41,22 @@ const CategoriesMenu = (props: any): React.ReactElement => {
40
41
 
41
42
  const theme = useTheme()
42
43
  const [, t] = useLanguage();
43
- const [curIndexCateg, setIndexCateg] = useState(categories.indexOf(category));
44
44
  const [{ parsePrice }] = useUtils();
45
45
  const [orientationState] = useDeviceOrientation();
46
46
  const [bottomSheetVisibility, { showCartBottomSheet, hideCartBottomSheet }] = useCartBottomSheet();
47
- const [productSelected, setProductSelected] = useState({})
47
+
48
+ const [productState, setProductState] = useState<any>(null)
49
+ const [productSelected, setProductSelected] = useState<any>({})
50
+ const [curIndexCateg, setIndexCateg] = useState(categories.indexOf(category));
48
51
  const [drawerState, setDrawerState] = useState({ isOpen: false, data: { order: null } });
49
52
 
50
53
  const width_dimension = Dimensions.get('window').width;
51
54
  const height_dimension = Dimensions.get('window').height;
52
-
55
+
53
56
  const KeyboardView = styled.KeyboardAvoidingView`
54
57
  flex: 1;
55
58
  `;
56
-
59
+
57
60
  const onChangeTabs = (idx: number) => {
58
61
  resetInactivityTimeout();
59
62
  setIndexCateg(idx);
@@ -75,6 +78,16 @@ const CategoriesMenu = (props: any): React.ReactElement => {
75
78
  cart = cartsList?.find((item: any) => item.business_id == businessId);
76
79
  }
77
80
 
81
+ const onEditProduct = (product: any) => {
82
+ setProductSelected({ ...product, _isEditProduct: true })
83
+ setDrawerValues({ isOpen: true, data: null })
84
+ }
85
+
86
+ const onAddProduct = (product: any) => {
87
+ setProductSelected(product)
88
+ setDrawerValues({ isOpen: true, data: null })
89
+ }
90
+
78
91
  const cartProps = {
79
92
  ...props,
80
93
  cart,
@@ -87,16 +100,32 @@ const CategoriesMenu = (props: any): React.ReactElement => {
87
100
  visible: bottomSheetVisibility,
88
101
  clearInactivityTimeout,
89
102
  resetInactivityTimeout,
103
+ onEditProduct,
104
+ onAddProduct
90
105
  },
91
106
  showNotFound: false,
92
107
  showCartBottomSheet,
93
108
  }
94
109
 
110
+ const onClickDrawer = () => {
111
+ setDrawerValues({ isOpen: !drawerState.isOpen, data: null })
112
+ setProductState(null)
113
+ }
114
+
115
+ const onSaveProductForm = () => {
116
+ showCartBottomSheet()
117
+ onClickDrawer()
118
+ }
119
+
95
120
  const onToggleCart = () => {
96
121
  if (bottomSheetVisibility) hideCartBottomSheet();
97
122
  else showCartBottomSheet();
98
123
  }
99
124
 
125
+ const onProductStateChange = useCallback((val: any) => {
126
+ setProductState({ ...productState, ...val })
127
+ }, [setProductState])
128
+
100
129
  return (
101
130
  <>
102
131
  <View style={{
@@ -112,44 +141,46 @@ const CategoriesMenu = (props: any): React.ReactElement => {
112
141
  }}
113
142
  >
114
143
  <Container nopadding nestedScrollEnabled>
115
- <View style={{ paddingTop: 20 }}>
116
- <NavBar
117
- title={categories[curIndexCateg].name}
118
- onActionLeft={goToBack}
119
- rightComponent={cart && (
120
- <TouchableOpacity
121
- style={{ paddingHorizontal: 20, flexDirection: 'row', alignItems: 'center' }}
122
- onPress={onToggleCart}
144
+ {Platform.OS === 'android' && (<View style={{ paddingTop: 20 }} />)}
145
+ <NavBar
146
+ title={categories[curIndexCateg].name}
147
+ onActionLeft={goToBack}
148
+ rightComponent={cart && (
149
+ <TouchableOpacity
150
+ style={{ paddingHorizontal: 20, flexDirection: 'row', alignItems: 'center' }}
151
+ onPress={onToggleCart}
152
+ >
153
+ <OText
154
+ color={theme.colors.mediumGray}
123
155
  >
124
- <OText
125
- color={theme.colors.mediumGray}
126
- >
127
- {`${cart?.products?.length || 0} ${t('ITEMS', 'items')}`} {parsePrice(cart?.total || 0)} {' '}
128
- </OText>
129
-
130
- <MaterialIcon
131
- name={bottomSheetVisibility ? "cart-off" : "cart-outline"}
132
- color={theme.colors.primary}
133
- size={30}
134
- />
135
- </TouchableOpacity>
136
- )}
137
- />
138
- <OSegment
139
- items={categories.map((category) => ({
140
- text: category.name
141
- }))}
142
- selectedIdx={curIndexCateg}
143
- onSelectItem={onChangeTabs}
144
- />
145
- </View>
146
-
147
- <GridContainer
148
- style={{
149
- marginTop: 20,
156
+ {`${cart?.products?.length || 0} ${t('ITEMS', 'items')}`} {parsePrice(cart?.total || 0)} {' '}
157
+ </OText>
158
+
159
+ <MaterialIcon
160
+ name={bottomSheetVisibility ? "cart-off" : "cart-outline"}
161
+ color={theme.colors.primary}
162
+ size={30}
163
+ />
164
+ </TouchableOpacity>
165
+ )}
166
+ />
167
+
168
+ <OSegment
169
+ items={categories.map((category) => ({
170
+ text: category.name
171
+ }))}
172
+ selectedIdx={curIndexCateg}
173
+ onSelectItem={onChangeTabs}
174
+ />
175
+
176
+ <GridContainer
177
+ style={{
178
+ marginTop: 20,
150
179
  paddingLeft: orientationState?.orientation === LANDSCAPE
151
- ? bottomSheetVisibility ? orientationState?.dimensions?.width * 0.004 :orientationState?.dimensions?.width * 0.008
152
- : 0
180
+ ? bottomSheetVisibility
181
+ ? orientationState?.dimensions?.width * 0.004
182
+ : orientationState?.dimensions?.width * 0.008
183
+ : 0
153
184
  }}
154
185
  >
155
186
  {categories[curIndexCateg].products.map((product) => (
@@ -170,8 +201,7 @@ const CategoriesMenu = (props: any): React.ReactElement => {
170
201
  onPress={() => {
171
202
  resetInactivityTimeout()
172
203
  if (isDrawer) {
173
- setProductSelected(product)
174
- setDrawerValues({ isOpen: true, data: null })
204
+ onAddProduct && onAddProduct(product)
175
205
  } else {
176
206
  navigation.navigate('ProductDetails', {
177
207
  businessId,
@@ -182,26 +212,31 @@ const CategoriesMenu = (props: any): React.ReactElement => {
182
212
  }}
183
213
  />
184
214
  ))}
215
+
216
+ {categories[curIndexCateg].products.length === 0 && (
217
+ <NotFoundSource
218
+ content={t('ERROR_NOT_FOUND_PRODUCTS_TIME', 'No products found at this time')}
219
+ />
220
+ )}
185
221
  </GridContainer>
186
222
  </Container>
187
223
  </View>
188
-
189
- <View
190
- style={{
191
- flex: bottomSheetVisibility && orientationState?.orientation === PORTRAIT ? 0 : 0.8,
192
- display: bottomSheetVisibility ? 'flex' : 'none'
193
- }}
194
- >
195
- <CartContent
196
- {...cartProps}
197
- />
198
- </View>
224
+ <View
225
+ style={{
226
+ flex: bottomSheetVisibility && orientationState?.orientation === PORTRAIT ? 0 : 0.8,
227
+ display: bottomSheetVisibility ? 'flex' : 'none'
228
+ }}
229
+ >
230
+ <CartContent
231
+ {...cartProps}
232
+ />
233
+ </View>
199
234
  </View>
200
235
  <DrawerView
201
236
  isOpen={drawerState.isOpen}
202
237
  width={width_dimension - (width_dimension * 0.4)}
203
238
  height={height_dimension}
204
- onClickIcon={() => setDrawerValues({ isOpen: !drawerState.isOpen, data: null })}
239
+ onClickIcon={onClickDrawer}
205
240
  >
206
241
  <KeyboardView
207
242
  enabled
@@ -209,14 +244,24 @@ const CategoriesMenu = (props: any): React.ReactElement => {
209
244
  >
210
245
  <ProductForm
211
246
  isDrawer
212
- product={productSelected}
213
- businessId={parseInt(businessId, 10)}
214
- businessSlug={businessSlug}
215
- onSave={() => {
216
- showCartBottomSheet()
217
- setDrawerValues({ isOpen: !drawerState.isOpen, data: null })
218
- }}
219
247
  navigation={navigation}
248
+ {...(productSelected?._isEditProduct ? {
249
+ isEdit: true,
250
+ productCart: productState?.productCart ?? productSelected,
251
+ product: productState?.product,
252
+ businessSlug: cart?.business?.slug,
253
+ businessId: cart?.business_id,
254
+ categoryId: productSelected?.category_id,
255
+ productId: productSelected?.id,
256
+ } : {
257
+ product: productSelected,
258
+ businessSlug: businessSlug,
259
+ businessId: parseInt(businessId, 10),
260
+ productState: productState,
261
+ productCart: productState,
262
+ })}
263
+ onSave={onSaveProductForm}
264
+ onProductStateChange={onProductStateChange}
220
265
  />
221
266
  </KeyboardView>
222
267
  </DrawerView>