ordering-ui-react-native 0.16.82 → 0.16.83-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 (218) hide show
  1. package/package.json +5 -5
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/ActiveOrders/styles.tsx +8 -14
  4. package/src/components/BusinessInformation/index.tsx +19 -4
  5. package/src/components/BusinessInformation/styles.tsx +2 -2
  6. package/src/components/BusinessProductsList/index.tsx +10 -10
  7. package/src/components/BusinessesListing/index.tsx +1 -1
  8. package/src/components/LanguageSelector/index.tsx +21 -16
  9. package/src/components/Messages/index.tsx +2 -2
  10. package/src/components/OrderCreating/index.tsx +1 -21
  11. package/src/components/OrdersOption/index.tsx +54 -56
  12. package/src/components/PaymentOptionsWebView/index.tsx +119 -120
  13. package/src/components/SingleProductReview/index.tsx +7 -4
  14. package/src/components/VerifyPhone/styles.tsx +1 -2
  15. package/src/components/shared/OToast.tsx +4 -4
  16. package/src/utils/index.tsx +2 -1
  17. package/themes/business/index.tsx +2 -0
  18. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +260 -238
  19. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  20. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  21. package/themes/business/src/components/Chat/index.tsx +31 -31
  22. package/themes/business/src/components/DriverMap/index.tsx +22 -9
  23. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  24. package/themes/business/src/components/LoginForm/Otp/index.tsx +120 -0
  25. package/themes/business/src/components/LoginForm/Otp/styles.tsx +7 -0
  26. package/themes/business/src/components/LoginForm/index.tsx +236 -80
  27. package/themes/business/src/components/LoginForm/styles.tsx +10 -0
  28. package/themes/business/src/components/MapView/index.tsx +19 -8
  29. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  30. package/themes/business/src/components/NewOrderNotification/index.tsx +31 -41
  31. package/themes/business/src/components/OrderDetails/Delivery.tsx +4 -3
  32. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +97 -50
  33. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +3 -3
  34. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
  35. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  36. package/themes/business/src/components/OrdersOption/index.tsx +63 -73
  37. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  38. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  39. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  40. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  41. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  42. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  43. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  44. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  45. package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
  46. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  47. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  48. package/themes/business/src/components/PreviousOrders/index.tsx +447 -247
  49. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  50. package/themes/business/src/components/ProductItemAccordion/index.tsx +30 -5
  51. package/themes/business/src/components/ReviewCustomer/index.tsx +39 -15
  52. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  53. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  54. package/themes/business/src/components/shared/OLink.tsx +33 -13
  55. package/themes/business/src/components/shared/OModal.tsx +16 -9
  56. package/themes/business/src/components/shared/OText.tsx +8 -2
  57. package/themes/business/src/types/index.tsx +36 -3
  58. package/themes/business/src/utils/index.tsx +53 -0
  59. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  60. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  61. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  62. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  63. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  64. package/themes/kiosk/src/components/LoginForm/Otp/index.tsx +92 -0
  65. package/themes/kiosk/src/components/LoginForm/Otp/styles.tsx +7 -0
  66. package/themes/kiosk/src/components/LoginForm/index.tsx +473 -151
  67. package/themes/kiosk/src/components/LoginForm/styles.tsx +14 -1
  68. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  69. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  70. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  71. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +1 -0
  72. package/themes/kiosk/src/components/PhoneInputNumber/styles.tsx +1 -3
  73. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  74. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  75. package/themes/kiosk/src/components/shared/OModal.tsx +14 -11
  76. package/themes/kiosk/src/layouts/Container.tsx +7 -1
  77. package/themes/kiosk/src/types/index.d.ts +13 -0
  78. package/themes/kiosk/src/utils/index.tsx +15 -0
  79. package/themes/original/index.tsx +8 -0
  80. package/themes/original/src/components/AddressDetails/index.tsx +10 -8
  81. package/themes/original/src/components/AddressForm/index.tsx +155 -139
  82. package/themes/original/src/components/AddressList/index.tsx +18 -18
  83. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  84. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  85. package/themes/original/src/components/BusinessBasicInformation/index.tsx +118 -76
  86. package/themes/original/src/components/BusinessController/index.tsx +101 -70
  87. package/themes/original/src/components/BusinessController/styles.tsx +14 -9
  88. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  89. package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -6
  90. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  91. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  92. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  93. package/themes/original/src/components/BusinessListingSearch/index.tsx +102 -155
  94. package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
  95. package/themes/original/src/components/BusinessProductsList/index.tsx +11 -8
  96. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  97. package/themes/original/src/components/BusinessProductsListing/index.tsx +564 -495
  98. package/themes/original/src/components/BusinessProductsListing/styles.tsx +13 -12
  99. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
  100. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  101. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +116 -81
  102. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  103. package/themes/original/src/components/BusinessesListing/index.tsx +6 -6
  104. package/themes/original/src/components/Cart/index.tsx +75 -41
  105. package/themes/original/src/components/CartContent/index.tsx +80 -18
  106. package/themes/original/src/components/CartContent/styles.tsx +11 -1
  107. package/themes/original/src/components/Checkout/index.tsx +91 -96
  108. package/themes/original/src/components/Checkout/styles.tsx +4 -2
  109. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  110. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  111. package/themes/original/src/components/DriverTips/index.tsx +52 -37
  112. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  113. package/themes/original/src/components/Favorite/index.tsx +7 -4
  114. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  115. package/themes/original/src/components/FavoriteList/index.tsx +70 -80
  116. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  117. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  118. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  119. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  120. package/themes/original/src/components/GoogleMap/index.tsx +10 -1
  121. package/themes/original/src/components/Help/index.tsx +8 -8
  122. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +14 -20
  123. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  124. package/themes/original/src/components/HelpGuide/index.tsx +13 -12
  125. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  126. package/themes/original/src/components/HelpOrder/index.tsx +12 -20
  127. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  128. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  129. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  130. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  131. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  132. package/themes/original/src/components/LoginForm/index.tsx +28 -8
  133. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  134. package/themes/original/src/components/MessageListing/index.tsx +7 -40
  135. package/themes/original/src/components/Messages/index.tsx +42 -26
  136. package/themes/original/src/components/MomentOption/index.tsx +195 -88
  137. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  138. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
  139. package/themes/original/src/components/MultiCheckout/index.tsx +153 -77
  140. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  141. package/themes/original/src/components/MultiOrdersDetails/index.tsx +85 -34
  142. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  143. package/themes/original/src/components/MyOrders/index.tsx +66 -17
  144. package/themes/original/src/components/NavBar/index.tsx +7 -6
  145. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  146. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  147. package/themes/original/src/components/Notifications/index.tsx +144 -0
  148. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  149. package/themes/original/src/components/OrderDetails/index.tsx +108 -218
  150. package/themes/original/src/components/OrderDetails/styles.tsx +10 -1
  151. package/themes/original/src/components/OrderItAgain/index.tsx +46 -43
  152. package/themes/original/src/components/OrderProgress/index.tsx +81 -105
  153. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  154. package/themes/original/src/components/OrderSummary/index.tsx +2 -2
  155. package/themes/original/src/components/OrderTypeSelector/index.tsx +13 -6
  156. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +93 -97
  157. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  158. package/themes/original/src/components/OrdersOption/index.tsx +86 -92
  159. package/themes/original/src/components/PageBanner/index.tsx +146 -0
  160. package/themes/original/src/components/PageBanner/styles.tsx +11 -0
  161. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  162. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  163. package/themes/original/src/components/PaymentOptions/index.tsx +1 -1
  164. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  165. package/themes/original/src/components/PlaceSpot/index.tsx +16 -6
  166. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  167. package/themes/original/src/components/ProductForm/index.tsx +240 -256
  168. package/themes/original/src/components/ProductForm/styles.tsx +5 -8
  169. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  170. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -10
  171. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
  172. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  173. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -49
  174. package/themes/original/src/components/ProfessionalProfile/index.tsx +54 -14
  175. package/themes/original/src/components/Promotions/index.tsx +234 -220
  176. package/themes/original/src/components/Promotions/styles.tsx +7 -2
  177. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  178. package/themes/original/src/components/ReviewOrder/index.tsx +43 -11
  179. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  180. package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
  181. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  182. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  183. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  184. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  185. package/themes/original/src/components/ServiceForm/index.tsx +377 -270
  186. package/themes/original/src/components/Sessions/index.tsx +11 -8
  187. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  188. package/themes/original/src/components/SignupForm/index.tsx +78 -66
  189. package/themes/original/src/components/SingleOrderCard/index.tsx +125 -56
  190. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  191. package/themes/original/src/components/SingleProductCard/index.tsx +112 -77
  192. package/themes/original/src/components/SingleProductCard/styles.tsx +14 -13
  193. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  194. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  195. package/themes/original/src/components/StripeCardsList/index.tsx +1 -1
  196. package/themes/original/src/components/StripeElementsForm/index.tsx +4 -1
  197. package/themes/original/src/components/UpsellingProducts/index.tsx +244 -215
  198. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  199. package/themes/original/src/components/UserDetails/index.tsx +5 -3
  200. package/themes/original/src/components/UserFormDetails/index.tsx +50 -54
  201. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  202. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  203. package/themes/original/src/components/UserProfileForm/index.tsx +21 -28
  204. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  205. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  206. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  207. package/themes/original/src/components/Wallets/index.tsx +177 -164
  208. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  209. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  210. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  211. package/themes/original/src/components/shared/OBottomPopup.tsx +1 -1
  212. package/themes/original/src/components/shared/OButton.tsx +9 -4
  213. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  214. package/themes/original/src/components/shared/OInput.tsx +10 -1
  215. package/themes/original/src/layouts/Container.tsx +13 -9
  216. package/themes/original/src/types/index.tsx +42 -7
  217. package/themes/original/src/utils/index.tsx +322 -58
  218. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -2,13 +2,14 @@ import * as React from 'react'
2
2
  import styled, { useTheme } from 'styled-components/native'
3
3
  import { OButton, OIcon, OText } from '../shared'
4
4
  import { Platform, TextStyle, ViewStyle, I18nManager, TouchableOpacity } from 'react-native'
5
+ import AntDesignIcon from 'react-native-vector-icons/AntDesign'
5
6
 
6
7
  const TitleWrapper = styled.View`
7
8
  flex-direction: column;
8
9
  padding-horizontal: 10px;
9
10
  `
10
11
  const TitleTopWrapper = styled.View`
11
- flex-grow: 1;
12
+ flex: 1;
12
13
  flex-direction: row;
13
14
  align-items: center;
14
15
  `
@@ -39,7 +40,8 @@ interface Props {
39
40
  style?: ViewStyle,
40
41
  titleWrapStyle?: ViewStyle,
41
42
  paddingTop?: number,
42
- isVertical?: boolean
43
+ isVertical?: boolean,
44
+ noMargin?: any
43
45
  }
44
46
 
45
47
  const NavBar = (props: Props) => {
@@ -61,8 +63,8 @@ const NavBar = (props: Props) => {
61
63
  return (
62
64
  <Wrapper style={{ paddingTop: props.paddingTop, ...{ flexDirection: props.isVertical ? 'column' : 'row', alignItems: props.isVertical ? 'flex-start' : 'center' }, ...props.style }}>
63
65
  <OButton
64
- imgLeftSrc={props.leftImg || theme.images.general.arrow_left}
65
- imgLeftStyle={{ width: 18 }}
66
+ imgLeftSrc={theme.images.general.arrow_left}
67
+ imgLeftStyle={{ width: 26 }}
66
68
  imgRightSrc={null}
67
69
  style={{ ...btnBackArrow, ...props.btnStyle, ...props.isVertical ? (I18nManager.isRTL ? { paddingRight: 0 } : { paddingLeft: 0 }) : {} }}
68
70
  onClick={props?.onActionLeft}
@@ -90,10 +92,9 @@ const NavBar = (props: Props) => {
90
92
  style={
91
93
  {
92
94
  textAlign: props.titleAlign ? props.titleAlign : 'center',
93
- marginRight: props.showCall ? 0 : 40,
95
+ marginRight: (props.showCall || !!props.noMargin) ? 0 : 40,
94
96
  color: props.titleColor || theme.colors.textNormal,
95
97
  paddingHorizontal: props.titleAlign == 'left' ? 12 : 0,
96
- width: '100%',
97
98
  ...props.titleStyle,
98
99
  }
99
100
  }
@@ -1,5 +1,5 @@
1
1
  import React from 'react'
2
- import { useLanguage } from 'ordering-components/native'
2
+ import { useLanguage, useOrderingTheme } from 'ordering-components/native'
3
3
  import { Dimensions } from 'react-native'
4
4
  import RNRestart from 'react-native-restart'
5
5
  import { OText, OIcon, OButton } from '../shared'
@@ -16,7 +16,8 @@ export const NetworkError = (props: NoNetworkParams) => {
16
16
  } = props
17
17
  const theme = useTheme()
18
18
  const [, t] = useLanguage()
19
-
19
+ const [orderingTheme] = useOrderingTheme()
20
+ const urlimage = orderingTheme?.theme?.no_internet?.components?.image
20
21
  const noNetworkImage = image || theme.images.general.noNetwork
21
22
  const deviceWidth = Dimensions.get('screen').width
22
23
 
@@ -38,7 +39,8 @@ export const NetworkError = (props: NoNetworkParams) => {
38
39
  </OText>
39
40
  <ImageContainer>
40
41
  <OIcon
41
- src={noNetworkImage}
42
+ src={!urlimage && noNetworkImage}
43
+ url={urlimage}
42
44
  width={(deviceWidth - 80) * 0.9}
43
45
  height={(deviceWidth - 80) * 0.8}
44
46
  />
@@ -20,12 +20,13 @@ export const NotFoundSource = (props: NotFoundSourceParams) => {
20
20
  const theme = useTheme();
21
21
 
22
22
  const errorImage = image || theme.images.general.notFound
23
+ const isUrl = typeof errorImage === 'string' && errorImage.includes('http')
23
24
 
24
25
  return (
25
26
  <NotFound>
26
27
  {errorImage && (
27
28
  <NotFoundImage>
28
- <OIcon src={errorImage} width={260} height={220} />
29
+ <OIcon url={isUrl && errorImage} src={!isUrl && errorImage} width={260} height={220} />
29
30
  </NotFoundImage>
30
31
  )}
31
32
  {content && conditioned && !errorImage && <OText color={theme.colors.disabled} size={18} style={{ textAlign: 'center' }}>{content}</OText>}
@@ -0,0 +1,144 @@
1
+ import React, { useEffect } from 'react'
2
+ import {
3
+ UserFormDetails as NotificationsController,
4
+ useLanguage,
5
+ useSession,
6
+ useOrderingTheme,
7
+ useToast,
8
+ ToastType,
9
+ } from 'ordering-components/native'
10
+ import { NotificationsGroupSwitchWrapper, SwitchWrapper, Container } from './styles'
11
+ import { StyleSheet, View } from 'react-native'
12
+ import { useState } from 'react'
13
+ import { useTheme } from 'styled-components/native';
14
+ import Spinner from 'react-native-loading-spinner-overlay';
15
+ import ToggleSwitch from 'toggle-switch-react-native'
16
+ import NavBar from '../NavBar'
17
+ import { OText } from '../shared'
18
+
19
+ const NotificationsUI = (props: any) => {
20
+ const {
21
+ navigation,
22
+ singleNotifications,
23
+ handleChangePromotions,
24
+ userData
25
+ } = props
26
+
27
+ const theme = useTheme();
28
+ const [{ user: userSession }] = useSession()
29
+ const [, t] = useLanguage();
30
+ const [, { showToast }] = useToast();
31
+ const [orderingTheme] = useOrderingTheme()
32
+
33
+ const user = userData || userSession
34
+
35
+ const [notificationsList, setNotificationsList] = useState({
36
+ email: singleNotifications?.result?.result
37
+ ? !!singleNotifications?.result?.result?.settings?.email?.newsletter
38
+ : !!(singleNotifications?.changes?.settings?.email?.newsletter ?? (user && user?.settings?.email?.newsletter)),
39
+ sms: singleNotifications?.result?.result
40
+ ? !!singleNotifications?.result?.result?.settings?.sms?.newsletter
41
+ : !!(singleNotifications?.changes?.settings?.sms?.newsletter ?? (user && user?.settings?.sms?.newsletter)),
42
+ notification: singleNotifications?.result?.result
43
+ ? !!singleNotifications?.result?.result?.settings?.notification?.newsletter
44
+ : !!(singleNotifications?.changes?.settings?.notification?.newsletter ?? (user && user?.settings?.notification?.newsletter))
45
+ })
46
+
47
+ const goToBack = () => navigation?.canGoBack() && navigation.goBack()
48
+ const showCustomerPromotions = !orderingTheme?.theme?.profile?.components?.promotions?.hidden
49
+ const showNotifications = !orderingTheme?.theme?.profile?.components?.notification_settings?.hidden
50
+
51
+ const handleEditNotifications = (key: any, value: any) => {
52
+ setNotificationsList({
53
+ ...notificationsList,
54
+ [key]: value
55
+ })
56
+ }
57
+
58
+ useEffect(() => {
59
+ if (singleNotifications.result.result && !singleNotifications.loading) {
60
+ if (!singleNotifications.result?.error) {
61
+ showToast(ToastType.Success, t('UPDATE_SUCCESSFULLY', 'Update successfully'));
62
+ }
63
+ }
64
+ }, [singleNotifications.result])
65
+
66
+ useEffect(() => {
67
+ const isSingle = true
68
+ handleChangePromotions(notificationsList, isSingle)
69
+ }, [notificationsList])
70
+
71
+ return (
72
+ <Container>
73
+ <NavBar
74
+ title={t('NOTIFICATIONS', 'Notifications')}
75
+ titleAlign={'center'}
76
+ onActionLeft={goToBack}
77
+ showCall={false}
78
+ style={{
79
+ paddingHorizontal: 40,
80
+ paddingVertical: 0,
81
+ }}
82
+ />
83
+ {showCustomerPromotions && showNotifications && (
84
+ <>
85
+ <Spinner visible={singleNotifications?.loading} />
86
+ <NotificationsGroupSwitchWrapper>
87
+ <OText style={{ ...styles.title }}>{t('MARKETING_NOTIFICATIONS', 'Marketing Notifications')}</OText>
88
+ <SwitchWrapper>
89
+ <OText>{t('EMAILS', 'Emails')}</OText>
90
+ <ToggleSwitch
91
+ isOn={notificationsList?.email}
92
+ onColor={theme.colors.primary}
93
+ size="small"
94
+ disabled={singleNotifications?.loading}
95
+ offColor={theme.colors.disabled}
96
+ animationSpeed={400}
97
+ onToggle={() => handleEditNotifications('email', !notificationsList?.email)}
98
+ />
99
+ </SwitchWrapper>
100
+ <SwitchWrapper>
101
+ <OText>{t('SMS', 'Sms')}</OText>
102
+ <ToggleSwitch
103
+ isOn={notificationsList?.sms}
104
+ onColor={theme.colors.primary}
105
+ size="small"
106
+ disabled={singleNotifications?.loading}
107
+ offColor={theme.colors.disabled}
108
+ animationSpeed={400}
109
+ onToggle={() => handleEditNotifications('sms', !notificationsList?.sms)}
110
+ />
111
+ </SwitchWrapper>
112
+ <SwitchWrapper>
113
+ <OText>{t('PUSH_NOTIFICATIONS', 'Push Notifications')}</OText>
114
+ <ToggleSwitch
115
+ isOn={notificationsList?.notification}
116
+ onColor={theme.colors.primary}
117
+ size="small"
118
+ disabled={singleNotifications?.loading}
119
+ offColor={theme.colors.disabled}
120
+ animationSpeed={400}
121
+ onToggle={() => handleEditNotifications('notification', !notificationsList?.notification)}
122
+ />
123
+ </SwitchWrapper>
124
+ </NotificationsGroupSwitchWrapper>
125
+ </>
126
+ )}
127
+ </Container>
128
+ )
129
+ }
130
+
131
+ const styles = StyleSheet.create({
132
+ title: {
133
+ marginBottom: 24,
134
+ fontWeight: 'bold',
135
+ }
136
+ });
137
+
138
+ export const NotificationsList = (props: any) => {
139
+ const notificationsListProps = {
140
+ ...props,
141
+ UIComponent: NotificationsUI
142
+ }
143
+ return <NotificationsController {...notificationsListProps} />
144
+ }
@@ -0,0 +1,20 @@
1
+ import styled from 'styled-components/native'
2
+
3
+ export const Container = styled.ScrollView`
4
+ position: relative;
5
+ flex: 1;
6
+ padding: 20px;
7
+ `
8
+
9
+ export const NotificationsGroupSwitchWrapper = styled.View`
10
+ flex-grow: 1;
11
+ justify-content: space-between;
12
+ padding: 0 20px;
13
+ `
14
+
15
+ export const SwitchWrapper = styled.View`
16
+ flex-direction: row;
17
+ justify-content: space-between;
18
+ align-items: center;
19
+ margin-bottom: 12px;
20
+ `
@@ -1,4 +1,4 @@
1
- import React, { useState, useEffect } from 'react';
1
+ import React, { useState, useEffect, useMemo } from 'react';
2
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';
@@ -10,6 +10,7 @@ import {
10
10
  useConfig
11
11
  } from 'ordering-components/native';
12
12
  import { useTheme } from 'styled-components/native';
13
+ import { showLocation } from 'react-native-map-link';
13
14
  import {
14
15
  OrderDetailsContainer,
15
16
  Header,
@@ -31,14 +32,15 @@ import {
31
32
  Map,
32
33
  Divider,
33
34
  OrderAction,
34
- PlaceSpotWrapper
35
+ PlaceSpotWrapper,
36
+ ProfessionalPhoto
35
37
  } from './styles';
36
38
  import { OButton, OIcon, OModal, OText } from '../shared';
37
39
  import { ProductItemAccordion } from '../ProductItemAccordion';
38
40
  import { TouchableOpacity } from 'react-native-gesture-handler';
39
41
  import { OrderDetailsParams } from '../../types';
40
42
  import { GoogleMap } from '../GoogleMap';
41
- import { verifyDecimals } from '../../utils';
43
+ import { verifyDecimals, getOrderStatus } from '../../utils';
42
44
  import { OSRow } from '../OrderSummary/styles';
43
45
  import AntIcon from 'react-native-vector-icons/AntDesign'
44
46
  import { TaxInformation } from '../TaxInformation';
@@ -68,6 +70,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
68
70
  },
69
71
  statusBar: {
70
72
  height: 12,
73
+ borderRadius: 8
71
74
  },
72
75
  logo: {
73
76
  width: 75,
@@ -93,6 +96,12 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
93
96
  display: 'flex',
94
97
  alignItems: 'center',
95
98
  flexDirection: 'row'
99
+ },
100
+ professionalBlock: {
101
+ borderBottomColor: theme.colors.border,
102
+ borderBottomWidth: 1,
103
+ marginVertical: 10,
104
+ paddingVertical: 5
96
105
  }
97
106
  });
98
107
 
@@ -108,6 +117,9 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
108
117
  const { order, businessData } = props.order;
109
118
  const mapValidStatuses = [9, 19, 23]
110
119
  const placeSpotTypes = [3, 4, 5]
120
+ const directionTypes = [2, 3, 4, 5]
121
+ const activeStatus = [0, 3, 4, 7, 8, 9, 14, 18, 19, 20, 21, 22, 23]
122
+ const enabledPoweredByOrdering = configs?.powered_by_ordering_module?.value
111
123
 
112
124
  const walletName: any = {
113
125
  cash: {
@@ -118,205 +130,6 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
118
130
  }
119
131
  }
120
132
 
121
- const getOrderStatus = (s: string) => {
122
- const status = parseInt(s);
123
- const orderStatus = [
124
- {
125
- key: 0,
126
- value: t('PENDING', 'Pending'),
127
- slug: 'PENDING',
128
- percentage: 0.25,
129
- image: theme.images.order.status0,
130
- },
131
- {
132
- key: 1,
133
- value: t('COMPLETED', 'Completed'),
134
- slug: 'COMPLETED',
135
- percentage: 1,
136
- image: theme.images.order.status1,
137
- },
138
- {
139
- key: 2,
140
- value: t('REJECTED', 'Rejected'),
141
- slug: 'REJECTED',
142
- percentage: 0,
143
- image: theme.images.order.status2,
144
- },
145
- {
146
- key: 3,
147
- value: t('DRIVER_IN_BUSINESS', 'Driver in business'),
148
- slug: 'DRIVER_IN_BUSINESS',
149
- percentage: 0.6,
150
- image: theme.images.order.status3,
151
- },
152
- {
153
- key: 4,
154
- value: t('PREPARATION_COMPLETED', 'Preparation Completed'),
155
- slug: 'PREPARATION_COMPLETED',
156
- percentage: 0.7,
157
- image: theme.images.order.status4,
158
- },
159
- {
160
- key: 5,
161
- value: t('REJECTED_BY_BUSINESS', 'Rejected by business'),
162
- slug: 'REJECTED_BY_BUSINESS',
163
- percentage: 0,
164
- image: theme.images.order.status5,
165
- },
166
- {
167
- key: 6,
168
- value: t('REJECTED_BY_DRIVER', 'Rejected by Driver'),
169
- slug: 'REJECTED_BY_DRIVER',
170
- percentage: 0,
171
- image: theme.images.order.status6,
172
- },
173
- {
174
- key: 7,
175
- value: t('ACCEPTED_BY_BUSINESS', 'Accepted by business'),
176
- slug: 'ACCEPTED_BY_BUSINESS',
177
- percentage: 0.35,
178
- image: theme.images.order.status7,
179
- },
180
- {
181
- key: 8,
182
- value: t('ACCEPTED_BY_DRIVER', 'Accepted by driver'),
183
- slug: 'ACCEPTED_BY_DRIVER',
184
- percentage: 0.45,
185
- image: theme.images.order.status8,
186
- },
187
- {
188
- key: 9,
189
- value: t('PICK_UP_COMPLETED_BY_DRIVER', 'Pick up completed by driver'),
190
- slug: 'PICK_UP_COMPLETED_BY_DRIVER',
191
- percentage: 0.8,
192
- image: theme.images.order.status9,
193
- },
194
- {
195
- key: 10,
196
- value: t('PICK_UP_FAILED_BY_DRIVER', 'Pick up Failed by driver'),
197
- slug: 'PICK_UP_FAILED_BY_DRIVER',
198
- percentage: 0,
199
- image: theme.images.order.status10,
200
- },
201
- {
202
- key: 11,
203
- value: t(
204
- 'DELIVERY_COMPLETED_BY_DRIVER',
205
- 'Delivery completed by driver',
206
- ),
207
- slug: 'DELIVERY_COMPLETED_BY_DRIVER',
208
- percentage: 1,
209
- image: theme.images.order.status11,
210
- },
211
- {
212
- key: 12,
213
- value: t('DELIVERY_FAILED_BY_DRIVER', 'Delivery Failed by driver'),
214
- slug: 'DELIVERY_FAILED_BY_DRIVER',
215
- percentage: 0,
216
- image: theme.images.order.status12,
217
- },
218
- {
219
- key: 13,
220
- value: t('PREORDER', 'PreOrder'),
221
- slug: 'PREORDER',
222
- percentage: 0,
223
- image: theme.images.order.status13,
224
- },
225
- {
226
- key: 14,
227
- value: t('ORDER_NOT_READY', 'Order not ready'),
228
- slug: 'ORDER_NOT_READY',
229
- percentage: 0,
230
- image: theme.images.order.status13,
231
- },
232
- {
233
- key: 15,
234
- value: t(
235
- 'ORDER_PICKEDUP_COMPLETED_BY_CUSTOMER',
236
- 'Order picked up completed by customer',
237
- ),
238
- slug: 'ORDER_PICKEDUP_COMPLETED_BY_CUSTOMER',
239
- percentage: 100,
240
- image: theme.images.order.status1,
241
- },
242
- {
243
- key: 16,
244
- value: t('CANCELLED_BY_CUSTOMER', 'Cancelled by customer'),
245
- slug: 'CANCELLED_BY_CUSTOMER',
246
- percentage: 0,
247
- image: theme.images.order.status2,
248
- },
249
- {
250
- key: 17,
251
- value: t(
252
- 'ORDER_NOT_PICKEDUP_BY_CUSTOMER',
253
- 'Order not picked up by customer',
254
- ),
255
- slug: 'ORDER_NOT_PICKEDUP_BY_CUSTOMER',
256
- percentage: 0,
257
- image: theme.images.order.status2,
258
- },
259
- {
260
- key: 18,
261
- value: t(
262
- 'DRIVER_ALMOST_ARRIVED_TO_BUSINESS',
263
- 'Driver almost arrived to business',
264
- ),
265
- slug: 'DRIVER_ALMOST_ARRIVED_TO_BUSINESS',
266
- percentage: 0.15,
267
- image: theme.images.order.status3,
268
- },
269
- {
270
- key: 19,
271
- value: t(
272
- 'DRIVER_ALMOST_ARRIVED_TO_CUSTOMER',
273
- 'Driver almost arrived to customer',
274
- ),
275
- slug: 'DRIVER_ALMOST_ARRIVED_TO_CUSTOMER',
276
- percentage: 0.9,
277
- image: theme.images.order.status11,
278
- },
279
- {
280
- key: 20,
281
- value: t(
282
- 'ORDER_CUSTOMER_ALMOST_ARRIVED_BUSINESS',
283
- 'Customer almost arrived to business',
284
- ),
285
- slug: 'ORDER_CUSTOMER_ALMOST_ARRIVED_BUSINESS',
286
- percentage: 90,
287
- image: theme.images.order.status7,
288
- },
289
- {
290
- key: 21,
291
- value: t(
292
- 'ORDER_CUSTOMER_ARRIVED_BUSINESS',
293
- 'Customer arrived to business',
294
- ),
295
- slug: 'ORDER_CUSTOMER_ARRIVED_BUSINESS',
296
- percentage: 95,
297
- image: theme.images.order.status7,
298
- },
299
- {
300
- key: 22,
301
- value: t('ORDER_LOOKING_FOR_DRIVER', 'Looking for driver'),
302
- slug: 'ORDER_LOOKING_FOR_DRIVER',
303
- percentage: 35,
304
- image: theme.images.order.status8
305
- },
306
- {
307
- key: 23,
308
- value: t('ORDER_DRIVER_ON_WAY', 'Driver on way'),
309
- slug: 'ORDER_DRIVER_ON_WAY',
310
- percentage: 45,
311
- image: theme.images.order.status8
312
- }
313
- ];
314
-
315
- const objectStatus = orderStatus.find((o) => o.key === status);
316
-
317
- return objectStatus && objectStatus;
318
- };
319
-
320
133
  const handleGoToMessages = (type: string) => {
321
134
  readMessages && readMessages();
322
135
  navigation.navigate(
@@ -447,6 +260,59 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
447
260
  lng: parseFloat(location?.location?.split(',')[1].replace(/[^-.0-9]/g, ''))
448
261
  } : location)
449
262
 
263
+ const getProductList = () => {
264
+ const professionalList = order?.products.reduce((prev: any, current: any) => {
265
+ const found = prev.find((item: any) => item.id === current?.calendar_event?.professional?.id)
266
+ if (found || !current?.calendar_event) {
267
+ return prev
268
+ }
269
+ return [...prev, current?.calendar_event?.professional]
270
+ }, [])
271
+
272
+ return (
273
+ <>
274
+ {professionalList?.length > 0 && professionalList.map((professional: any, i: number) => (
275
+ <View key={i} style={styles.professionalBlock}>
276
+ <View style={{ flexDirection: 'row', alignItems: 'center', width: '100%' }}>
277
+ {professional?.photo ? (
278
+ <ProfessionalPhoto
279
+ source={{
280
+ uri: professional?.photo
281
+ }}
282
+ imageStyle={{ borderRadius: 8 }}
283
+ />
284
+ ) : (
285
+ <OIcon
286
+ src={theme.images.general.user}
287
+ cover={false}
288
+ width={80}
289
+ height={80}
290
+ />
291
+ )}
292
+ <OText size={12} lineHeight={18} weight={'500'} numberOfLines={1}>{professional?.name} {professional?.lastname}</OText>
293
+ </View>
294
+ {order?.products.filter((product: any) => product?.calendar_event?.professional?.id === professional?.id).map((product: any, i: number) => (
295
+ <ProductItemAccordion
296
+ key={product?.id || i}
297
+ product={product}
298
+ isFromCheckout
299
+ />
300
+ ))}
301
+ </View>
302
+ ))}
303
+ {order?.products.filter((product: any) => !product?.calendar_event).map((product: any, i: number) => (
304
+ <ProductItemAccordion
305
+ key={product?.id || i}
306
+ product={product}
307
+ isFromCheckout
308
+ />
309
+ ))}
310
+ </>
311
+ )
312
+ }
313
+
314
+ const sortedProductList = useMemo(() => getProductList(), [order?.products])
315
+
450
316
  useEffect(() => {
451
317
  if (driverLocation) {
452
318
  parsedLocations[0] = {
@@ -531,11 +397,22 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
531
397
  titleWrapStyle={{ paddingHorizontal: 0 }}
532
398
  titleStyle={{ marginRight: 0, marginLeft: 0 }}
533
399
  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 })}
400
+ {
401
+ activeStatus.includes(order?.status)
402
+ ? order?.eta_time + 'min'
403
+ : order?.delivery_datetime_utc
404
+ ? parseDate(order?.delivery_datetime_utc)
405
+ : parseDate(order?.delivery_datetime, { utc: false })
406
+ }
537
407
  </OText>}
538
408
  />
409
+ {enabledPoweredByOrdering && (
410
+ <View style={{ display: 'flex', justifyContent: 'center', alignItems: 'center' }}>
411
+ <OText>
412
+ Powered By Ordering.co
413
+ </OText>
414
+ </View>
415
+ )}
539
416
  <OrderInfo>
540
417
  <OrderData>
541
418
  <View style={styles.linkWrapper}>
@@ -551,7 +428,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
551
428
  onPress={() => handleClickOrderReview(order)}
552
429
  >
553
430
  <OText
554
- size={10}
431
+ size={12}
555
432
  lineHeight={15}
556
433
  color={theme.colors.primary}
557
434
  style={{ textDecorationLine: 'underline' }}
@@ -567,7 +444,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
567
444
 
568
445
  >
569
446
  <OText
570
- size={10}
447
+ size={12}
571
448
  lineHeight={15}
572
449
  color={theme.colors.primary}
573
450
  style={{ textDecorationLine: 'underline', textTransform: 'capitalize' }}
@@ -682,6 +559,26 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
682
559
  {order?.business?.address}
683
560
  </OText>
684
561
  </View>
562
+ {directionTypes.includes(order?.delivery_type) && (
563
+ <OButton
564
+ text={t('GET_DIRECTIONS', 'Get Directions')}
565
+ imgRightSrc=''
566
+ textStyle={{ color: theme.colors.white }}
567
+ style={{
568
+ alignSelf: 'center',
569
+ borderRadius: 10,
570
+ marginTop: 30
571
+ }}
572
+ onClick={() => showLocation({
573
+ latitude: order?.business?.location?.lat,
574
+ longitude: order?.business?.location?.lng,
575
+ naverCallerName: 'com.reactnativeappstemplate5',
576
+ dialogTitle: t('GET_DIRECTIONS', 'Get Directions'),
577
+ dialogMessage: t('WHAT_APP_WOULD_YOU_USE', 'What app would you like to use?'),
578
+ cancelText: t('CANCEL', 'Cancel'),
579
+ })}
580
+ />
581
+ )}
685
582
  </OrderBusiness>
686
583
 
687
584
  {placeSpotTypes.includes(order?.delivery_type) && (
@@ -761,7 +658,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
761
658
  <>
762
659
  {order?.driver?.location && mapValidStatuses.includes(parseInt(order?.status)) && (
763
660
  <Map>
764
- <GoogleMap
661
+ <GoogleMap
765
662
  location={typeof order?.driver?.location?.location === 'string'
766
663
  ? {
767
664
  lat: parseFloat(driverLocationString[0]),
@@ -875,14 +772,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
875
772
  </OrderAction>
876
773
  </HeaderInfo>
877
774
  <OrderProducts>
878
- {order?.products?.length &&
879
- order?.products.map((product: any, i: number) => (
880
- <ProductItemAccordion
881
- key={product?.id || i}
882
- product={product}
883
- isFromCheckout
884
- />
885
- ))}
775
+ {sortedProductList}
886
776
  </OrderProducts>
887
777
  <OrderBill>
888
778
  <View style={{ height: 1, backgroundColor: theme.colors.border, marginBottom: 17 }} />
@@ -1050,8 +940,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
1050
940
  )}
1051
941
  <Total>
1052
942
  <Table>
1053
- <OText size={20} lineHeight={30} weight={'600'} color={theme.colors.textNormal}>{t('TOTAL', 'Total')}</OText>
1054
- <OText size={20} lineHeight={30} weight={'600'} color={theme.colors.textNormal}>
943
+ <OText size={14} style={{ fontWeight: 'bold' }} color={theme.colors.textNormal}>{t('TOTAL', 'Total')}</OText>
944
+ <OText size={14} style={{ fontWeight: 'bold' }} color={theme.colors.textNormal}>
1055
945
  {parsePrice(order?.summary?.total ?? order?.total)}
1056
946
  </OText>
1057
947
  </Table>