ordering-ui-react-native 0.15.80 → 0.15.81-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 (217) 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 +6 -2
  14. package/src/components/LoginForm/index.tsx +120 -30
  15. package/src/components/LoginForm/styles.tsx +6 -0
  16. package/src/components/NotificationSetting/index.tsx +85 -0
  17. package/src/components/OrderDetails/index.tsx +7 -21
  18. package/src/components/PaymentOptions/index.tsx +335 -365
  19. package/src/components/PaymentOptionsWebView/index.tsx +120 -121
  20. package/src/components/ReviewDriver/index.tsx +1 -1
  21. package/src/components/ReviewOrder/index.tsx +2 -1
  22. package/src/components/ReviewProducts/index.tsx +11 -0
  23. package/src/components/SignupForm/index.tsx +145 -61
  24. package/src/components/SingleProductCard/index.tsx +16 -4
  25. package/src/components/SingleProductReview/index.tsx +1 -1
  26. package/src/components/StripeElementsForm/index.tsx +25 -16
  27. package/src/components/StripeMethodForm/index.tsx +22 -24
  28. package/src/components/UpsellingProducts/index.tsx +1 -1
  29. package/src/components/UserProfileForm/index.tsx +63 -6
  30. package/src/components/UserProfileForm/styles.tsx +8 -0
  31. package/src/components/VerifyPhone/styles.tsx +1 -2
  32. package/src/components/shared/OBottomPopup.tsx +6 -2
  33. package/src/components/shared/OModal.tsx +1 -1
  34. package/src/hooks/useCountdownTimer.tsx +26 -0
  35. package/src/index.tsx +2 -0
  36. package/src/navigators/CheckoutNavigator.tsx +6 -0
  37. package/src/navigators/HomeNavigator.tsx +6 -0
  38. package/src/pages/BusinessesListing.tsx +7 -6
  39. package/src/pages/MultiCheckout.tsx +31 -0
  40. package/src/pages/MultiOrdersDetails.tsx +27 -0
  41. package/src/pages/OrderDetails.tsx +1 -1
  42. package/src/pages/ReviewDriver.tsx +2 -2
  43. package/src/pages/ReviewOrder.tsx +2 -2
  44. package/src/theme.json +0 -1
  45. package/src/types/index.tsx +18 -11
  46. package/src/utils/index.tsx +28 -29
  47. package/themes/business/index.tsx +4 -0
  48. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +100 -60
  49. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
  50. package/themes/business/src/components/Chat/index.tsx +51 -91
  51. package/themes/business/src/components/DriverMap/index.tsx +6 -5
  52. package/themes/business/src/components/DriverSchedule/index.tsx +71 -0
  53. package/themes/business/src/components/DriverSchedule/styles.tsx +6 -0
  54. package/themes/business/src/components/LoginForm/index.tsx +89 -2
  55. package/themes/business/src/components/LoginForm/styles.tsx +6 -0
  56. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  57. package/themes/business/src/components/NewOrderNotification/index.tsx +26 -13
  58. package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
  59. package/themes/business/src/components/OrderDetails/Delivery.tsx +28 -11
  60. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +26 -18
  61. package/themes/business/src/components/OrdersListManager/index.tsx +11 -4
  62. package/themes/business/src/components/OrdersOption/index.tsx +16 -4
  63. package/themes/business/src/components/PreviousOrders/index.tsx +7 -7
  64. package/themes/business/src/components/ProductItemAccordion/index.tsx +5 -4
  65. package/themes/business/src/components/ScheduleBlocked/index.tsx +53 -0
  66. package/themes/business/src/components/UserFormDetails/index.tsx +5 -2
  67. package/themes/business/src/components/UserProfileForm/index.tsx +28 -4
  68. package/themes/business/src/components/shared/OModal.tsx +41 -38
  69. package/themes/business/src/types/index.tsx +15 -7
  70. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  71. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  72. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  73. package/themes/kiosk/src/components/BusinessMenu/index.tsx +25 -26
  74. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -3
  75. package/themes/kiosk/src/components/Cart/index.tsx +10 -11
  76. package/themes/kiosk/src/components/CartBottomSheet/index.tsx +9 -2
  77. package/themes/kiosk/src/components/CartContent/index.tsx +0 -11
  78. package/themes/kiosk/src/components/CartItem/index.tsx +4 -3
  79. package/themes/kiosk/src/components/CategoriesMenu/index.tsx +107 -62
  80. package/themes/kiosk/src/components/Checkout/index.tsx +40 -22
  81. package/themes/kiosk/src/components/CustomerName/index.tsx +0 -6
  82. package/themes/kiosk/src/components/DrawerView/index.tsx +1 -0
  83. package/themes/kiosk/src/components/DrawerView/styles.tsx +2 -2
  84. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  85. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  86. package/themes/kiosk/src/components/OrderDetails/index.tsx +2 -2
  87. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +9 -11
  88. package/themes/kiosk/src/components/PaymentOptions/index.tsx +55 -53
  89. package/themes/kiosk/src/components/ProductForm/index.tsx +6 -7
  90. package/themes/kiosk/src/components/ProductOptionSubOption/index.tsx +3 -1
  91. package/themes/kiosk/src/components/UpsellingProducts/index.tsx +16 -5
  92. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  93. package/themes/kiosk/src/types/index.d.ts +1 -0
  94. package/themes/original/index.tsx +22 -0
  95. package/themes/original/src/components/ActiveOrders/index.tsx +15 -132
  96. package/themes/original/src/components/ActiveOrders/styles.tsx +0 -54
  97. package/themes/original/src/components/AddressForm/index.tsx +7 -6
  98. package/themes/original/src/components/AddressList/index.tsx +1 -1
  99. package/themes/original/src/components/AppleLogin/index.tsx +6 -8
  100. package/themes/original/src/components/BusinessBasicInformation/index.tsx +291 -150
  101. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +6 -2
  102. package/themes/original/src/components/BusinessController/index.tsx +179 -96
  103. package/themes/original/src/components/BusinessController/styles.tsx +5 -0
  104. package/themes/original/src/components/BusinessItemAccordion/index.tsx +8 -5
  105. package/themes/original/src/components/BusinessItemAccordion/styles.tsx +3 -1
  106. package/themes/original/src/components/BusinessListingSearch/index.tsx +234 -64
  107. package/themes/original/src/components/BusinessListingSearch/styles.tsx +22 -2
  108. package/themes/original/src/components/BusinessPreorder/index.tsx +1 -1
  109. package/themes/original/src/components/BusinessProductsCategories/index.tsx +2 -2
  110. package/themes/original/src/components/BusinessProductsList/CategoryDescription/index.tsx +44 -0
  111. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  112. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  113. package/themes/original/src/components/BusinessProductsList/index.tsx +65 -73
  114. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  115. package/themes/original/src/components/BusinessProductsListing/index.tsx +315 -176
  116. package/themes/original/src/components/BusinessProductsListing/styles.tsx +11 -0
  117. package/themes/original/src/components/BusinessReviews/index.tsx +6 -1
  118. package/themes/original/src/components/BusinessTypeFilter/index.tsx +106 -38
  119. package/themes/original/src/components/BusinessTypeFilter/styles.tsx +2 -0
  120. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +560 -0
  121. package/themes/original/src/components/BusinessesListing/{styles.tsx → Layout/Appointment/styles.tsx} +24 -2
  122. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +661 -0
  123. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +137 -0
  124. package/themes/original/src/components/BusinessesListing/index.tsx +104 -462
  125. package/themes/original/src/components/Cart/index.tsx +84 -39
  126. package/themes/original/src/components/Cart/styles.tsx +4 -0
  127. package/themes/original/src/components/Checkout/index.tsx +117 -58
  128. package/themes/original/src/components/Checkout/styles.tsx +0 -1
  129. package/themes/original/src/components/DriverTips/index.tsx +17 -12
  130. package/themes/original/src/components/Favorite/index.tsx +92 -0
  131. package/themes/original/src/components/Favorite/styles.tsx +22 -0
  132. package/themes/original/src/components/FavoriteList/index.tsx +298 -0
  133. package/themes/original/src/components/FavoriteList/styles.tsx +5 -0
  134. package/themes/original/src/components/ForgotPasswordForm/index.tsx +84 -4
  135. package/themes/original/src/components/GPSButton/index.tsx +15 -8
  136. package/themes/original/src/components/GoogleMap/index.tsx +11 -11
  137. package/themes/original/src/components/Help/index.tsx +21 -4
  138. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +18 -1
  139. package/themes/original/src/components/LastOrders/index.tsx +12 -1
  140. package/themes/original/src/components/LoginForm/Otp/index.tsx +91 -0
  141. package/themes/original/src/components/LoginForm/Otp/styles.tsx +7 -0
  142. package/themes/original/src/components/LoginForm/index.tsx +332 -164
  143. package/themes/original/src/components/LoginForm/styles.tsx +1 -3
  144. package/themes/original/src/components/Messages/index.tsx +1 -1
  145. package/themes/original/src/components/MomentSelector/index.tsx +197 -0
  146. package/themes/original/src/components/MomentSelector/styles.tsx +6 -0
  147. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +243 -0
  148. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/styles.tsx +46 -0
  149. package/themes/original/src/components/MultiCheckout/index.tsx +304 -0
  150. package/themes/original/src/components/MultiCheckout/styles.tsx +59 -0
  151. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +372 -0
  152. package/themes/original/src/components/MultiOrdersDetails/index.tsx +258 -0
  153. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +50 -0
  154. package/themes/original/src/components/MyOrders/index.tsx +132 -27
  155. package/themes/original/src/components/MyOrders/styles.tsx +8 -1
  156. package/themes/original/src/components/NavBar/index.tsx +4 -4
  157. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +167 -0
  158. package/themes/original/src/components/OrderDetails/index.tsx +164 -64
  159. package/themes/original/src/components/OrderDetails/styles.tsx +5 -2
  160. package/themes/original/src/components/OrderItAgain/index.tsx +72 -0
  161. package/themes/original/src/components/OrderItAgain/styles.tsx +10 -0
  162. package/themes/original/src/components/OrderSummary/index.tsx +2 -35
  163. package/themes/original/src/components/OrderTypeSelector/index.tsx +77 -35
  164. package/themes/original/src/components/OrderTypeSelector/styles.tsx +19 -1
  165. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +153 -0
  166. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/styles.tsx +6 -0
  167. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +53 -0
  168. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/styles.tsx +6 -0
  169. package/themes/original/src/components/OrdersOption/index.tsx +139 -46
  170. package/themes/original/src/components/OrdersOption/styles.tsx +4 -1
  171. package/themes/original/src/components/PaymentOptionCash/index.tsx +2 -2
  172. package/themes/original/src/components/PaymentOptionWallet/index.tsx +15 -22
  173. package/themes/original/src/components/PaymentOptions/index.tsx +57 -37
  174. package/themes/original/src/components/PhoneInputNumber/index.tsx +5 -11
  175. package/themes/original/src/components/PlaceSpot/index.tsx +243 -47
  176. package/themes/original/src/components/PlaceSpot/styles.tsx +0 -2
  177. package/themes/original/src/components/PreviousOrders/index.tsx +18 -147
  178. package/themes/original/src/components/ProductForm/index.tsx +712 -673
  179. package/themes/original/src/components/ProductForm/styles.tsx +9 -7
  180. package/themes/original/src/components/ProductItemAccordion/index.tsx +2 -2
  181. package/themes/original/src/components/ProductOption/index.tsx +1 -1
  182. package/themes/original/src/components/ProductOptionSubOption/index.tsx +13 -9
  183. package/themes/original/src/components/ProfessionalFilter/index.tsx +128 -0
  184. package/themes/original/src/components/ProfessionalFilter/styles.tsx +0 -0
  185. package/themes/original/src/components/ProfessionalProfile/index.tsx +298 -0
  186. package/themes/original/src/components/ProfessionalProfile/styles.tsx +46 -0
  187. package/themes/original/src/components/Promotions/index.tsx +145 -128
  188. package/themes/original/src/components/Promotions/styles.tsx +2 -0
  189. package/themes/original/src/components/ReviewDriver/index.tsx +6 -6
  190. package/themes/original/src/components/ReviewOrder/index.tsx +1 -1
  191. package/themes/original/src/components/ReviewTrigger/index.tsx +118 -0
  192. package/themes/original/src/components/ReviewTrigger/styles.tsx +34 -0
  193. package/themes/original/src/components/SearchBar/index.tsx +13 -5
  194. package/themes/original/src/components/ServiceForm/index.tsx +579 -0
  195. package/themes/original/src/components/ServiceForm/styles.tsx +50 -0
  196. package/themes/original/src/components/SignupForm/index.tsx +237 -126
  197. package/themes/original/src/components/SingleOrderCard/index.tsx +316 -0
  198. package/themes/original/src/components/SingleOrderCard/styles.tsx +54 -0
  199. package/themes/original/src/components/SingleProductCard/index.tsx +196 -94
  200. package/themes/original/src/components/SingleProductCard/styles.tsx +2 -2
  201. package/themes/original/src/components/StripeElementsForm/index.tsx +25 -9
  202. package/themes/original/src/components/StripeElementsForm/naked.tsx +2 -2
  203. package/themes/original/src/components/UpsellingProducts/index.tsx +0 -4
  204. package/themes/original/src/components/UserDetails/index.tsx +32 -18
  205. package/themes/original/src/components/UserFormDetails/index.tsx +108 -74
  206. package/themes/original/src/components/UserProfile/index.tsx +5 -1
  207. package/themes/original/src/components/UserProfileForm/index.tsx +15 -10
  208. package/themes/original/src/components/UserVerification/index.tsx +178 -192
  209. package/themes/original/src/components/Wallets/index.tsx +2 -2
  210. package/themes/original/src/components/shared/OBottomPopup.tsx +47 -14
  211. package/themes/original/src/components/shared/OButton.tsx +2 -0
  212. package/themes/original/src/components/shared/OInput.tsx +3 -2
  213. package/themes/original/src/components/shared/OModal.tsx +4 -2
  214. package/themes/original/src/layouts/FloatingBottomContainer.tsx +5 -1
  215. package/themes/original/src/types/index.tsx +208 -44
  216. package/themes/original/src/utils/index.tsx +94 -1
  217. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,5 +1,5 @@
1
1
  import React, { useState, useEffect } from 'react';
2
- import { View, StyleSheet, BackHandler, Platform, Linking } from 'react-native';
2
+ import { View, StyleSheet, BackHandler, Platform, Linking, RefreshControl } from 'react-native';
3
3
  import LinearGradient from 'react-native-linear-gradient';
4
4
  import { _setStoreData } from '../../providers/StoreUtil';
5
5
  import {
@@ -30,7 +30,8 @@ import {
30
30
  OrderDriver,
31
31
  Map,
32
32
  Divider,
33
- OrderAction
33
+ OrderAction,
34
+ PlaceSpotWrapper
34
35
  } from './styles';
35
36
  import { OButton, OIcon, OModal, OText } from '../shared';
36
37
  import { ProductItemAccordion } from '../ProductItemAccordion';
@@ -42,7 +43,9 @@ import { OSRow } from '../OrderSummary/styles';
42
43
  import AntIcon from 'react-native-vector-icons/AntDesign'
43
44
  import { TaxInformation } from '../TaxInformation';
44
45
  import { Placeholder, PlaceholderLine } from 'rn-placeholder';
45
-
46
+ import NavBar from '../NavBar'
47
+ import { OrderHistory } from './OrderHistory';
48
+ import { PlaceSpot } from '../PlaceSpot'
46
49
  export const OrderDetailsUI = (props: OrderDetailsParams) => {
47
50
  const {
48
51
  navigation,
@@ -53,7 +56,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
53
56
  driverLocation,
54
57
  onNavigationRedirect,
55
58
  reorderState,
56
- handleReorder
59
+ handleReorder,
60
+ getOrder
57
61
  } = props;
58
62
 
59
63
  const theme = useTheme();
@@ -82,8 +86,14 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
82
86
  justifyContent: 'flex-start',
83
87
  paddingLeft: 0,
84
88
  height: 30,
85
- width: 40,
89
+ width: 30,
90
+ marginTop: Platform.OS === 'ios' ? 0 : 30
86
91
  },
92
+ linkWrapper: {
93
+ display: 'flex',
94
+ alignItems: 'center',
95
+ flexDirection: 'row'
96
+ }
87
97
  });
88
98
 
89
99
  const [, t] = useLanguage();
@@ -92,9 +102,12 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
92
102
  const [{ carts }] = useOrder()
93
103
 
94
104
  const [isReviewed, setIsReviewed] = useState(false)
105
+ const [isOrderHistory, setIsOrderHistory] = useState(false)
95
106
  const [openTaxModal, setOpenTaxModal] = useState<any>({ open: false, tax: null, type: '' })
107
+ const [refreshing] = useState(false);
96
108
  const { order, businessData } = props.order;
97
109
  const mapValidStatuses = [9, 19, 23]
110
+ const placeSpotTypes = [3, 4, 5]
98
111
 
99
112
  const walletName: any = {
100
113
  cash: {
@@ -332,7 +345,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
332
345
  };
333
346
 
334
347
  const getIncludedTaxes = () => {
335
- if (order?.taxes?.length === 0) {
348
+ if (order?.taxes?.length === 0 || !order?.taxes) {
336
349
  return order.tax_type === 1 ? order?.summary?.tax ?? 0 : 0
337
350
  } else {
338
351
  return order?.taxes.reduce((taxIncluded: number, tax: any) => {
@@ -363,18 +376,39 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
363
376
  )
364
377
  }
365
378
 
379
+ const handleTriggerReview = () => {
380
+ setIsOrderHistory(false);
381
+ (
382
+ parseInt(order?.status) === 1 ||
383
+ parseInt(order?.status) === 11 ||
384
+ parseInt(order?.status) === 15
385
+ ) && !order.review && !isReviewed && handleClickOrderReview(order)
386
+ }
387
+
388
+
389
+ const resfreshOrder = () => {
390
+ getOrder()
391
+ }
366
392
 
367
393
  useEffect(() => {
394
+ const _businessId = 'businessId:' + businessData?.id
368
395
  if (reorderState?.error) {
369
- const _businessId = 'businessId:' + businessData?.id
370
- const _uuid = carts[_businessId]?.uuid
371
- if (_uuid) {
372
- _setStoreData('remove-cartId', JSON.stringify(_uuid))
396
+ if (businessData?.id) {
397
+ _setStoreData('adjust-cart-products', JSON.stringify(_businessId))
373
398
  navigation.navigate('Business', { store: businessData?.slug })
374
399
  }
375
400
  }
376
- if (!reorderState?.error && reorderState?.result?.uuid) {
377
- onNavigationRedirect && onNavigationRedirect('CheckoutNavigator', { cartUuid: reorderState?.result.uuid })
401
+ if (!reorderState?.error && reorderState.loading === false && businessData?.id) {
402
+ const products = carts?.[_businessId]?.products
403
+ const available = products?.every((product: any) => product.valid === true)
404
+
405
+ if (available && reorderState?.result?.uuid && (products?.length === order?.products.length)) {
406
+ onNavigationRedirect && onNavigationRedirect('CheckoutNavigator', { cartUuid: reorderState?.result.uuid })
407
+ } else {
408
+ _setStoreData('adjust-cart-products', JSON.stringify(_businessId))
409
+ products?.length !== order?.products.length && _setStoreData('already-removed', JSON.stringify('removed'))
410
+ navigation.navigate('Business', { store: businessData?.slug })
411
+ }
378
412
  }
379
413
  }, [reorderState])
380
414
 
@@ -406,15 +440,32 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
406
440
  'https://res.cloudinary.com/demo/image/upload/c_thumb,g_face,r_max/d_avatar.png/non_existing_id.png',
407
441
  },
408
442
  ];
443
+ const driverLocationString = typeof order?.driver?.location?.location === 'string' && order?.driver?.location?.location?.split(',').map((l: string) => l.replace(/[^-.0-9]/g, ''))
444
+ const parsedLocations = locations.map(location => typeof location?.location === 'string' ? {
445
+ ...location,
446
+ lat: parseFloat(location?.location?.split(',')[0].replace(/[^-.0-9]/g, '')),
447
+ lng: parseFloat(location?.location?.split(',')[1].replace(/[^-.0-9]/g, ''))
448
+ } : location)
409
449
 
410
450
  useEffect(() => {
411
451
  if (driverLocation) {
412
- locations[0] = driverLocation;
452
+ parsedLocations[0] = {
453
+ ...locations[0],
454
+ ...driverLocation
455
+ }
413
456
  }
414
457
  }, [driverLocation]);
415
458
 
416
459
  return (
417
- <OrderDetailsContainer keyboardShouldPersistTaps="handled">
460
+ <OrderDetailsContainer
461
+ keyboardShouldPersistTaps="handled"
462
+ refreshControl={
463
+ <RefreshControl
464
+ refreshing={refreshing}
465
+ onRefresh={() => resfreshOrder()}
466
+ />
467
+ }
468
+ >
418
469
  {(!order || Object.keys(order).length === 0) && (
419
470
  <Placeholder style={{ marginTop: 30 }}>
420
471
  <Header>
@@ -470,49 +521,62 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
470
521
  {order && Object.keys(order).length > 0 && (
471
522
  <>
472
523
  <Header>
473
- <OButton
474
- imgLeftSrc={theme.images.general.arrow_left}
475
- imgRightSrc={null}
476
- style={styles.btnBackArrow}
477
- onClick={() => handleArrowBack()}
478
- imgLeftStyle={{ tintColor: theme.colors.disabled }}
524
+ <NavBar
525
+ title={`${t('ORDER', 'Order')} #${order?.id}`}
526
+ titleAlign={'center'}
527
+ onActionLeft={handleArrowBack}
528
+ showCall={false}
529
+ btnStyle={{ paddingLeft: 0 }}
530
+ style={{ marginTop: Platform.OS === 'ios' ? 0 : 20 }}
531
+ titleWrapStyle={{ paddingHorizontal: 0 }}
532
+ titleStyle={{ marginRight: 0, marginLeft: 0 }}
533
+ subTitle={<OText size={12} lineHeight={18} color={theme.colors.textNormal}>
534
+ {order?.delivery_datetime_utc
535
+ ? parseDate(order?.delivery_datetime_utc)
536
+ : parseDate(order?.delivery_datetime, { utc: false })}
537
+ </OText>}
479
538
  />
480
539
  <OrderInfo>
481
540
  <OrderData>
482
- <OText
483
- size={20}
484
- lineHeight={30}
485
- weight={'600'}
486
- color={theme.colors.textNormal}>
487
- {t('ORDER', 'Order')} #{order?.id}
488
- </OText>
489
- <OText size={12} lineHeight={18} color={theme.colors.textNormal}>
490
- {order?.delivery_datetime_utc
491
- ? parseDate(order?.delivery_datetime_utc)
492
- : parseDate(order?.delivery_datetime, { utc: false })}
493
- </OText>
494
- {
495
- (
496
- parseInt(order?.status) === 1 ||
497
- parseInt(order?.status) === 11 ||
498
- parseInt(order?.status) === 15
499
- ) && !order.review && !isReviewed && (
500
- <TouchableOpacity
501
- activeOpacity={0.7}
502
- style={{ marginTop: 6 }}
503
- onPress={() => handleClickOrderReview(order)}
541
+ <View style={styles.linkWrapper}>
542
+ {
543
+ (
544
+ parseInt(order?.status) === 1 ||
545
+ parseInt(order?.status) === 11 ||
546
+ parseInt(order?.status) === 15
547
+ ) && !order.review && !isReviewed && (
548
+ <TouchableOpacity
549
+ activeOpacity={0.7}
550
+ style={{ marginTop: 6, marginRight: 10 }}
551
+ onPress={() => handleClickOrderReview(order)}
552
+ >
553
+ <OText
554
+ size={10}
555
+ lineHeight={15}
556
+ color={theme.colors.primary}
557
+ style={{ textDecorationLine: 'underline' }}
558
+ >
559
+ {t('REVIEW_YOUR_ORDER', 'Review your order')}
560
+ </OText>
561
+ </TouchableOpacity>
562
+ )}
563
+ <TouchableOpacity
564
+ activeOpacity={0.7}
565
+ style={{ marginTop: 6 }}
566
+ onPress={() => setIsOrderHistory(true)}
504
567
 
568
+ >
569
+ <OText
570
+ size={10}
571
+ lineHeight={15}
572
+ color={theme.colors.primary}
573
+ style={{ textDecorationLine: 'underline', textTransform: 'capitalize' }}
505
574
  >
506
- <OText
507
- size={10}
508
- lineHeight={15}
509
- color={theme.colors.textSecondary}
510
- style={{ textDecorationLine: 'underline' }}
511
- >
512
- {t('REVIEW_YOUR_ORDER', 'Review your order')}
513
- </OText>
514
- </TouchableOpacity>
515
- )}
575
+ {t('VIEW_DETAILS', 'View Details')}
576
+ </OText>
577
+ </TouchableOpacity>
578
+ </View>
579
+
516
580
  <StaturBar>
517
581
  <LinearGradient
518
582
  start={{ x: 0.0, y: 0.0 }}
@@ -619,6 +683,18 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
619
683
  </OText>
620
684
  </View>
621
685
  </OrderBusiness>
686
+
687
+ {placeSpotTypes.includes(order?.delivery_type) && (
688
+ <PlaceSpotWrapper>
689
+ <PlaceSpot
690
+ isInputMode
691
+ cart={order}
692
+ spotNumberDefault={order?.spot_number}
693
+ vehicleDefault={order?.vehicle}
694
+ />
695
+ </PlaceSpotWrapper>
696
+ )}
697
+
622
698
  <View
623
699
  style={{
624
700
  height: 8,
@@ -652,13 +728,15 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
652
728
  mBottom={2}>
653
729
  {order?.customer?.address}
654
730
  </OText>
655
- <OText
656
- size={12}
657
- lineHeight={18}
658
- color={theme.colors.textNormal}
659
- mBottom={2}>
660
- {order?.customer?.cellphone}
661
- </OText>
731
+ {(!!order?.customer?.cellphone) && (
732
+ <OText
733
+ size={12}
734
+ lineHeight={18}
735
+ color={theme.colors.textNormal}
736
+ mBottom={2}>
737
+ {`${!!order?.customer?.country_phone_code ? '+' + order?.customer?.country_phone_code : ''} ${order?.customer?.cellphone}`}
738
+ </OText>
739
+ )}
662
740
  </InfoBlock>
663
741
  </Customer>
664
742
  {order?.delivery_option !== undefined && order?.delivery_type === 1 && (
@@ -671,7 +749,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
671
749
  </OText>
672
750
  </View>
673
751
  )}
674
- {order?.comment && (
752
+ {!!order?.comment && (
675
753
  <View style={{ marginTop: 15 }}>
676
754
  <OText size={16} style={{ textAlign: 'left' }} color={theme.colors.textNormal}>
677
755
  {t('COMMENT', 'Comment')}
@@ -683,9 +761,14 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
683
761
  <>
684
762
  {order?.driver?.location && mapValidStatuses.includes(parseInt(order?.status)) && (
685
763
  <Map>
686
- <GoogleMap
687
- location={order?.driver?.location}
688
- locations={locations}
764
+ <GoogleMap
765
+ location={typeof order?.driver?.location?.location === 'string'
766
+ ? {
767
+ lat: parseFloat(driverLocationString[0]),
768
+ lng: parseFloat(driverLocationString[1]),
769
+ } : driverLocation ?? order?.driver?.location
770
+ }
771
+ locations={parsedLocations}
689
772
  readOnly
690
773
  />
691
774
  </Map>
@@ -1011,7 +1094,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
1011
1094
  )}
1012
1095
  </View>
1013
1096
  <OText>
1014
- -{parsePrice(event.amount)}
1097
+ -{parsePrice(event.amount, { isTruncable: true })}
1015
1098
  </OText>
1016
1099
  </View>
1017
1100
  ))}
@@ -1033,6 +1116,23 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
1033
1116
  products={order?.products}
1034
1117
  />
1035
1118
  </OModal>
1119
+ <OModal
1120
+ open={isOrderHistory}
1121
+ onClose={() => setIsOrderHistory(false)}
1122
+ entireModal
1123
+ >
1124
+ <OrderHistory
1125
+ order={order}
1126
+ messages={messages}
1127
+ enableReview={(
1128
+ parseInt(order?.status) === 1 ||
1129
+ parseInt(order?.status) === 11 ||
1130
+ parseInt(order?.status) === 15
1131
+ ) && !order.review && !isReviewed}
1132
+ onClose={() => setIsOrderHistory(false)}
1133
+ handleTriggerReview={handleTriggerReview}
1134
+ />
1135
+ </OModal>
1036
1136
  </OrderDetailsContainer>
1037
1137
  );
1038
1138
  };
@@ -5,7 +5,6 @@ export const OrderDetailsContainer = styled.ScrollView`
5
5
  `
6
6
 
7
7
  export const NavBack = styled.TouchableOpacity`
8
-
9
8
  `
10
9
 
11
10
 
@@ -127,4 +126,8 @@ export const Divider = styled.View`
127
126
  `
128
127
  export const OrderAction = styled.View`
129
128
  flex-direction: row;
130
- `
129
+ `
130
+
131
+ export const PlaceSpotWrapper = styled.View`
132
+ padding-horizontal: 40px;
133
+ `
@@ -0,0 +1,72 @@
1
+ import React from 'react'
2
+ import { OText } from '../shared'
3
+ import { useLanguage } from 'ordering-components/native'
4
+ import { useTheme } from 'styled-components/native'
5
+ import { SingleProductCard } from '../SingleProductCard'
6
+ import { OrderItAgainParams } from '../../types'
7
+ import { ScrollView, Dimensions } from 'react-native'
8
+ import moment from 'moment';
9
+ import {
10
+ Container,
11
+ ProductWrapper
12
+ } from './styles'
13
+
14
+ export const OrderItAgain = (props: OrderItAgainParams) => {
15
+ const {
16
+ onProductClick,
17
+ productList,
18
+ businessId,
19
+ categoryState,
20
+ currentCart,
21
+ handleUpdateProducts,
22
+ navigation
23
+ } = props
24
+
25
+ const [, t] = useLanguage()
26
+ const theme = useTheme()
27
+ const { width } = Dimensions.get('window');
28
+
29
+ return (
30
+ <Container>
31
+ <OText
32
+ size={16}
33
+ lineHeight={24}
34
+ color={theme.colors.textNormal}
35
+ style={{
36
+ fontWeight: '600',
37
+ marginBottom: 6
38
+ }}
39
+ >
40
+ {t('ORDER_IT_AGAIN', 'Order it again')}
41
+ </OText>
42
+ <OText
43
+ size={12}
44
+ lineHeight={18}
45
+ color={theme.colors.disabled}
46
+ >
47
+ {t('ORDER_IT_AGAIN_DESC', 'Quickly add items from your past orders.')}
48
+ </OText>
49
+ <ScrollView
50
+ horizontal
51
+ showsVerticalScrollIndicator={false}
52
+ showsHorizontalScrollIndicator={false}
53
+ >
54
+ {productList?.length > 0 && productList?.sort((a: any, b:any) => moment(b?.last_ordered_date).valueOf() - moment(a?.last_ordered_date).valueOf()).map((product: any, i: number) => (
55
+ <ProductWrapper key={'prod_' + product.id + `_${i}`} style={{ width: width - 120, }}>
56
+ <SingleProductCard
57
+ isSoldOut={product.inventoried && !product.quantity}
58
+ product={product}
59
+ businessId={businessId}
60
+ categoryState={categoryState}
61
+ onProductClick={() => onProductClick(product)}
62
+ productAddedToCartLength={currentCart?.products?.reduce((productsLength: number, Cproduct: any) => { return productsLength + (Cproduct?.id === product?.id ? Cproduct?.quantity : 0) }, 0)}
63
+ handleUpdateProducts={handleUpdateProducts}
64
+ navigation={navigation}
65
+ isPreviously
66
+ />
67
+ </ProductWrapper>
68
+ ))}
69
+ </ScrollView>
70
+ </Container>
71
+ )
72
+ }
@@ -0,0 +1,10 @@
1
+ import styled from 'styled-components/native'
2
+
3
+ export const Container = styled.View`
4
+ margin-top: 20px;
5
+ `
6
+
7
+ export const ProductWrapper = styled.View`
8
+ margin-right: 20px;
9
+ padding-top: 30px;
10
+ `
@@ -26,7 +26,6 @@ import AntIcon from 'react-native-vector-icons/AntDesign'
26
26
  import { TaxInformation } from '../TaxInformation';
27
27
  import { TouchableOpacity } from 'react-native';
28
28
  import { OAlert } from '../../../../../src/components/shared'
29
- import { PlaceSpot } from '../PlaceSpot'
30
29
 
31
30
  const OrderSummaryUI = (props: any) => {
32
31
  const {
@@ -50,9 +49,7 @@ const OrderSummaryUI = (props: any) => {
50
49
  const [validationFields] = useValidationFields();
51
50
  const [openTaxModal, setOpenTaxModal] = useState<any>({ open: false, data: null, type: '' })
52
51
  const [confirm, setConfirm] = useState<any>({ open: false, content: null, handleOnAccept: null, id: null, title: null })
53
- const [openPlaceModal, setOpenPlaceModal] = useState(false)
54
52
  const isCouponEnabled = validationFields?.fields?.checkout?.coupon?.enabled;
55
- const placeSpotTypes = [3, 4]
56
53
 
57
54
  const handleDeleteClick = (product: any) => {
58
55
  removeProduct(product, cart)
@@ -71,7 +68,7 @@ const OrderSummaryUI = (props: any) => {
71
68
  }
72
69
 
73
70
  const getIncludedTaxes = () => {
74
- if (cart?.taxes === null) {
71
+ if (cart?.taxes === null || !cart?.taxes) {
75
72
  return cart.business.tax_type === 1 ? cart?.tax : 0
76
73
  } else {
77
74
  return cart?.taxes.reduce((taxIncluded: number, tax: any) => {
@@ -299,29 +296,11 @@ const OrderSummaryUI = (props: any) => {
299
296
  {t('TOTAL', 'Total')}
300
297
  </OText>
301
298
  <OText size={14} style={{ fontWeight: 'bold' }} >
302
- {parsePrice(cart?.total >= 0 ? cart?.total : 0)}
299
+ {parsePrice(cart?.balance >= 0 ? cart?.balance : 0)}
303
300
  </OText>
304
301
  </OSTable>
305
302
  </View>
306
303
  )}
307
- {placeSpotTypes.includes(orderState?.options?.type) && (
308
- <OSTable style={{ marginTop: 15 }}>
309
- <OText size={14} lineHeight={21} weight={'600'}>
310
- {t('SPOT', 'Spot')}: {cart?.place?.name || t('NO_SELECTED', 'No selected')}
311
- </OText>
312
- <TouchableOpacity onPress={() => setOpenPlaceModal(true)}>
313
- <OText
314
- size={14}
315
- lineHeight={21}
316
- weight={'600'}
317
- color={theme.colors.primary}
318
- style={{ textDecorationLine: 'underline' }}
319
- >
320
- {t('EDIT', 'Edit')}
321
- </OText>
322
- </TouchableOpacity>
323
- </OSTable>
324
- )}
325
304
  {cart?.status !== 2 && (
326
305
  <OSTable>
327
306
  <View style={{ width: '100%', marginTop: 20 }}>
@@ -370,18 +349,6 @@ const OrderSummaryUI = (props: any) => {
370
349
  products={cart?.products}
371
350
  />
372
351
  </OModal>
373
- <OModal
374
- open={openPlaceModal}
375
- title={t('CHOOSE_YOUR_SPOT', 'Choose your spot')}
376
- onClose={() => setOpenPlaceModal(false)}
377
- entireModal
378
- >
379
- <PlaceSpot
380
- cart={cart}
381
- isOpenPlaceSpot={openPlaceModal}
382
- setOpenPlaceModal={setOpenPlaceModal}
383
- />
384
- </OModal>
385
352
  <OAlert
386
353
  open={confirm.open}
387
354
  title={confirm.title}
@@ -6,7 +6,7 @@ import {
6
6
  } from 'ordering-components/native'
7
7
  import { useTheme } from 'styled-components/native';
8
8
  import { Platform, View } from 'react-native'
9
- import { BgImage, ListWrapper, MaskCont, OrderTypeWrapper, Wrapper } from './styles'
9
+ import { BgImage, ListWrapper, MaskCont, OrderTypeWrapper, OTab, OTabs, TabBtn, Wrapper } from './styles'
10
10
  import { OrderTypeSelectParams } from '../../types'
11
11
  import { OIcon, OText } from '../shared'
12
12
  import NavBar from '../NavBar';
@@ -20,14 +20,16 @@ const OrderTypeSelectorUI = (props: OrderTypeSelectParams) => {
20
20
  defaultValue,
21
21
  configTypes,
22
22
  orderTypes,
23
- setOrderTypeValue
23
+ setOrderTypeValue,
24
+ isChewLayout,
25
+ chewOrderTypes
24
26
  } = props
25
27
 
26
28
  const theme = useTheme();
27
29
  const [orderState] = useOrder();
28
30
  const [, t] = useLanguage();
29
31
  const _orderTypes = orderTypes.filter((type: any) => configTypes?.includes(type.value));
30
-
32
+
31
33
  const items = _orderTypes.map((type) => {
32
34
  return {
33
35
  value: type.value,
@@ -42,43 +44,83 @@ const OrderTypeSelectorUI = (props: OrderTypeSelectParams) => {
42
44
  if (!orderState.loading) {
43
45
  setOrderTypeValue && setOrderTypeValue(orderType)
44
46
  handleChangeOrderType(orderType)
45
- goToBack();
47
+ if(!isChewLayout){
48
+ goToBack();
49
+ }
46
50
  }
47
51
  }
48
52
 
49
53
  return (
50
54
  <Wrapper>
51
- <NavBar
52
- onActionLeft={() => goToBack()}
53
- btnStyle={{ paddingLeft: 0 }}
54
- paddingTop={0}
55
- style={{ paddingBottom: 0 }}
56
- title={t('HOW_WILL_YOU_DELIVERY_TYPE', 'How will your order type?')}
57
- titleAlign={'center'}
58
- titleStyle={{ fontSize: 14 }}
59
- />
60
- {
61
- items.length > 0 && (
62
- <ListWrapper>
63
- {
64
- items && items.map((item: any, idx: number) =>
65
- <OrderTypeWrapper activeOpacity={0.8} key={idx} disabled={orderState.loading} onPress={() => handleChangeOrderTypeCallback(item.value)}>
66
- <BgImage source={theme.images.orderTypes[`type${item?.value || 1}`]} resizeMode={'cover'} style={{opacity: item?.value == typeSelected || typeSelected === undefined ? 1 : 0.4}}>
67
- <MaskCont>
68
- <OText size={12} lineHeight={18} color={theme.colors.white} weight={Platform.OS === 'android' ? 'bold' : '600'}>{item?.label}</OText>
69
- <OText size={10} lineHeight={15} color={theme.colors.white}>{item?.description}</OText>
70
- <View style={{flexDirection: 'row', alignItems: 'center'}}>
71
- <OText size={10} lineHeight={15} color={theme.colors.white}>{t('START_MY_ORDER', 'Start my order')}</OText>
72
- <OIcon src={theme.images.general.arrow_left} width={16} color={theme.colors.white} style={{transform: [{ rotate: '180deg' }], marginStart: 4}} />
73
- </View>
74
- </MaskCont>
75
- </BgImage>
76
- </OrderTypeWrapper>
77
- )
78
- }
79
- </ListWrapper>
80
- )
81
- }
55
+ {isChewLayout ? (
56
+ <View>
57
+ <OTabs
58
+ horizontal
59
+ showsHorizontalScrollIndicator={false}
60
+ >
61
+ {chewOrderTypes?.map((type : any) => (
62
+ <TabBtn
63
+ key={type.value}
64
+ onPress={() => handleChangeOrderTypeCallback(type.value)}
65
+ >
66
+ <OTab
67
+ style={{
68
+ borderBottomColor:
69
+ type.value === typeSelected
70
+ ? theme.colors.textNormal
71
+ : theme.colors.border,
72
+ }}>
73
+ <OText
74
+ size={14}
75
+ color={
76
+ type.value === typeSelected
77
+ ? theme.colors.textNormal
78
+ : theme.colors.disabled
79
+ }
80
+ weight={type.value === typeSelected ? 'bold' : 'normal'}>
81
+ {type.name}
82
+ </OText>
83
+ </OTab>
84
+ </TabBtn>
85
+ ))}
86
+ </OTabs>
87
+ </View>
88
+ ) : (
89
+ <>
90
+ <NavBar
91
+ onActionLeft={() => goToBack()}
92
+ btnStyle={{ paddingLeft: 0 }}
93
+ paddingTop={0}
94
+ style={{ paddingBottom: 0 }}
95
+ title={t('HOW_WILL_YOU_DELIVERY_TYPE', 'How will your order type?')}
96
+ titleAlign={'center'}
97
+ titleStyle={{ fontSize: 14 }}
98
+ />
99
+ {
100
+ items.length > 0 && (
101
+ <ListWrapper>
102
+ {
103
+ items && items.map((item: any, idx: number) =>
104
+ <OrderTypeWrapper activeOpacity={0.8} key={idx} disabled={orderState.loading} onPress={() => handleChangeOrderTypeCallback(item.value)}>
105
+ <BgImage source={theme.images.orderTypes[`type${item?.value || 1}`]} resizeMode={'cover'} style={{ opacity: item?.value == typeSelected || typeSelected === undefined ? 1 : 0.4 }}>
106
+ <MaskCont>
107
+ <OText size={12} lineHeight={18} color={theme.colors.white} weight={Platform.OS === 'android' ? 'bold' : '600'}>{item?.label}</OText>
108
+ <OText size={10} lineHeight={15} color={theme.colors.white}>{item?.description}</OText>
109
+ <View style={{ flexDirection: 'row', alignItems: 'center' }}>
110
+ <OText size={10} lineHeight={15} color={theme.colors.white}>{t('START_MY_ORDER', 'Start my order')}</OText>
111
+ <OIcon src={theme.images.general.arrow_left} width={16} color={theme.colors.white} style={{ transform: [{ rotate: '180deg' }], marginStart: 4 }} />
112
+ </View>
113
+ </MaskCont>
114
+ </BgImage>
115
+ </OrderTypeWrapper>
116
+ )
117
+ }
118
+ </ListWrapper>
119
+ )
120
+ }
121
+ </>
122
+ )}
123
+
82
124
  </Wrapper>
83
125
  )
84
126
  }