ordering-ui-react-native 0.16.56 → 0.16.57-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 (200) hide show
  1. package/package.json +6 -5
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/ActiveOrders/index.tsx +61 -63
  4. package/src/components/ActiveOrders/styles.tsx +8 -14
  5. package/src/components/BusinessInformation/index.tsx +33 -4
  6. package/src/components/BusinessInformation/styles.tsx +2 -2
  7. package/src/components/BusinessProductsList/index.tsx +10 -10
  8. package/src/components/BusinessesListing/index.tsx +1 -1
  9. package/src/components/Checkout/index.tsx +2 -1
  10. package/src/components/LanguageSelector/index.tsx +21 -16
  11. package/src/components/Messages/index.tsx +2 -2
  12. package/src/components/NotificationSetting/index.tsx +85 -0
  13. package/src/components/OrdersOption/index.tsx +54 -56
  14. package/src/components/PaymentOptions/index.tsx +298 -345
  15. package/src/components/PaymentOptionsWebView/index.tsx +120 -121
  16. package/src/components/SingleProductReview/index.tsx +7 -4
  17. package/src/components/StripeElementsForm/index.tsx +25 -16
  18. package/src/components/VerifyPhone/styles.tsx +1 -2
  19. package/src/components/shared/OBottomPopup.tsx +6 -2
  20. package/src/components/shared/OToast.tsx +4 -4
  21. package/src/index.tsx +2 -0
  22. package/src/types/@fatnlazycat/react-native-recaptcha-v3/index.d.ts +1 -0
  23. package/src/utils/index.tsx +2 -1
  24. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +260 -238
  25. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  26. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  27. package/themes/business/src/components/Chat/index.tsx +40 -32
  28. package/themes/business/src/components/DriverMap/index.tsx +7 -5
  29. package/themes/business/src/components/LoginForm/index.tsx +111 -74
  30. package/themes/business/src/components/MapView/index.tsx +12 -1
  31. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  32. package/themes/business/src/components/NewOrderNotification/index.tsx +26 -41
  33. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +70 -43
  34. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +3 -3
  35. package/themes/business/src/components/OrdersListManager/index.tsx +10 -3
  36. package/themes/business/src/components/OrdersOption/index.tsx +76 -77
  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 +440 -245
  49. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  50. package/themes/business/src/components/ProductItemAccordion/index.tsx +3 -2
  51. package/themes/business/src/components/ReviewCustomer/index.tsx +39 -15
  52. package/themes/business/src/components/UserFormDetails/index.tsx +5 -2
  53. package/themes/business/src/components/UserProfileForm/index.tsx +2 -0
  54. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  55. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  56. package/themes/business/src/components/shared/OLink.tsx +33 -13
  57. package/themes/business/src/components/shared/OText.tsx +8 -2
  58. package/themes/business/src/types/index.tsx +25 -11
  59. package/themes/business/src/utils/index.tsx +10 -0
  60. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  61. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  62. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  63. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  64. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  65. package/themes/kiosk/src/components/LoginForm/index.tsx +121 -10
  66. package/themes/kiosk/src/components/LoginForm/styles.tsx +5 -0
  67. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  68. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  69. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  70. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  71. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  72. package/themes/kiosk/src/types/index.d.ts +2 -0
  73. package/themes/original/index.tsx +8 -0
  74. package/themes/original/src/components/AddressDetails/index.tsx +10 -8
  75. package/themes/original/src/components/AddressForm/index.tsx +153 -137
  76. package/themes/original/src/components/AddressList/index.tsx +1 -1
  77. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  78. package/themes/original/src/components/BusinessBasicInformation/index.tsx +53 -37
  79. package/themes/original/src/components/BusinessController/index.tsx +112 -48
  80. package/themes/original/src/components/BusinessController/styles.tsx +14 -9
  81. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  82. package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -6
  83. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  84. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  85. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  86. package/themes/original/src/components/BusinessListingSearch/index.tsx +80 -138
  87. package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
  88. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  89. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  90. package/themes/original/src/components/BusinessProductsList/index.tsx +59 -61
  91. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  92. package/themes/original/src/components/BusinessProductsListing/index.tsx +177 -81
  93. package/themes/original/src/components/BusinessProductsListing/styles.tsx +14 -12
  94. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
  95. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  96. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +112 -107
  97. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  98. package/themes/original/src/components/BusinessesListing/index.tsx +17 -10
  99. package/themes/original/src/components/Cart/index.tsx +82 -15
  100. package/themes/original/src/components/Cart/styles.tsx +4 -0
  101. package/themes/original/src/components/CartContent/index.tsx +27 -17
  102. package/themes/original/src/components/CartContent/styles.tsx +1 -1
  103. package/themes/original/src/components/Checkout/index.tsx +114 -117
  104. package/themes/original/src/components/Checkout/styles.tsx +4 -3
  105. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  106. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  107. package/themes/original/src/components/DriverTips/index.tsx +4 -4
  108. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  109. package/themes/original/src/components/FavoriteList/index.tsx +69 -45
  110. package/themes/original/src/components/FloatingButton/index.tsx +0 -1
  111. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  112. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  113. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  114. package/themes/original/src/components/GoogleMap/index.tsx +10 -1
  115. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +25 -10
  116. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +4 -0
  117. package/themes/original/src/components/HelpGuide/index.tsx +9 -8
  118. package/themes/original/src/components/HelpOrder/index.tsx +9 -8
  119. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  120. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  121. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  122. package/themes/original/src/components/LoginForm/index.tsx +98 -41
  123. package/themes/original/src/components/LottieAnimation/index.tsx +69 -0
  124. package/themes/original/src/components/Messages/index.tsx +35 -20
  125. package/themes/original/src/components/MomentOption/index.tsx +8 -6
  126. package/themes/original/src/components/MultiCart/index.tsx +63 -0
  127. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
  128. package/themes/original/src/components/MultiCheckout/index.tsx +10 -2
  129. package/themes/original/src/components/MultiOrdersDetails/index.tsx +34 -16
  130. package/themes/original/src/components/MyOrders/index.tsx +89 -25
  131. package/themes/original/src/components/NavBar/index.tsx +11 -5
  132. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  133. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  134. package/themes/original/src/components/Notifications/index.tsx +148 -0
  135. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  136. package/themes/original/src/components/OrderDetails/index.tsx +114 -15
  137. package/themes/original/src/components/OrderDetails/styles.tsx +15 -2
  138. package/themes/original/src/components/OrderItAgain/index.tsx +75 -0
  139. package/themes/original/src/components/OrderItAgain/styles.tsx +10 -0
  140. package/themes/original/src/components/OrderProgress/index.tsx +77 -66
  141. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  142. package/themes/original/src/components/OrderSummary/index.tsx +2 -35
  143. package/themes/original/src/components/OrderTypeSelector/index.tsx +85 -36
  144. package/themes/original/src/components/OrderTypeSelector/styles.tsx +19 -1
  145. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +94 -98
  146. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  147. package/themes/original/src/components/OrdersOption/index.tsx +95 -55
  148. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  149. package/themes/original/src/components/PaymentOptions/index.tsx +1 -2
  150. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  151. package/themes/original/src/components/PlaceSpot/index.tsx +249 -47
  152. package/themes/original/src/components/PlaceSpot/styles.tsx +0 -2
  153. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  154. package/themes/original/src/components/ProductForm/index.tsx +367 -384
  155. package/themes/original/src/components/ProductForm/styles.tsx +7 -12
  156. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  157. package/themes/original/src/components/ProductOption/index.tsx +1 -1
  158. package/themes/original/src/components/ProductOptionSubOption/index.tsx +16 -8
  159. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +0 -1
  160. package/themes/original/src/components/ProfessionalFilter/index.tsx +2 -1
  161. package/themes/original/src/components/ProfessionalProfile/index.tsx +19 -8
  162. package/themes/original/src/components/Promotions/index.tsx +232 -219
  163. package/themes/original/src/components/Promotions/styles.tsx +7 -2
  164. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  165. package/themes/original/src/components/ReviewOrder/index.tsx +43 -11
  166. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  167. package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
  168. package/themes/original/src/components/ReviewTrigger/index.tsx +28 -10
  169. package/themes/original/src/components/ReviewTrigger/styles.tsx +10 -3
  170. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  171. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  172. package/themes/original/src/components/ServiceForm/index.tsx +330 -266
  173. package/themes/original/src/components/SignupForm/index.tsx +134 -89
  174. package/themes/original/src/components/SingleOrderCard/index.tsx +224 -132
  175. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  176. package/themes/original/src/components/SingleProductCard/index.tsx +116 -72
  177. package/themes/original/src/components/SingleProductCard/styles.tsx +2 -9
  178. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  179. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  180. package/themes/original/src/components/StripeElementsForm/index.tsx +13 -2
  181. package/themes/original/src/components/UpsellingProducts/index.tsx +15 -5
  182. package/themes/original/src/components/UserDetails/index.tsx +5 -3
  183. package/themes/original/src/components/UserFormDetails/index.tsx +6 -48
  184. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  185. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  186. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  187. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  188. package/themes/original/src/components/Wallets/index.tsx +176 -164
  189. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  190. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  191. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  192. package/themes/original/src/components/shared/OBottomPopup.tsx +32 -21
  193. package/themes/original/src/components/shared/OButton.tsx +8 -3
  194. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  195. package/themes/original/src/components/shared/OInput.tsx +10 -1
  196. package/themes/original/src/layouts/Container.tsx +13 -9
  197. package/themes/original/src/layouts/FloatingBottomContainer.tsx +5 -1
  198. package/themes/original/src/types/index.tsx +63 -8
  199. package/themes/original/src/utils/index.tsx +103 -58
  200. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,9 +1,10 @@
1
1
  import React, { useState, useEffect } from 'react'
2
2
  import { useLanguage } from 'ordering-components/native';
3
- import { View, StyleSheet, RefreshControl } from 'react-native';
3
+ import { View, StyleSheet, RefreshControl, Platform } from 'react-native';
4
+ import AntDesignIcon from 'react-native-vector-icons/AntDesign'
4
5
 
5
6
  import { OrdersOption } from '../OrdersOption'
6
- import { HeaderTitle, OText } from '../shared'
7
+ import { HeaderTitle, OButton, OText } from '../shared'
7
8
  import { ScrollView } from 'react-native-gesture-handler';
8
9
  import { Tab } from './styles'
9
10
  import { useTheme } from 'styled-components/native';
@@ -11,6 +12,7 @@ import { Container } from '../../layouts/Container';
11
12
 
12
13
  export const MyOrders = (props: any) => {
13
14
  const {
15
+ navigation,
14
16
  hideOrders,
15
17
  businessesSearchList
16
18
  } = props
@@ -21,7 +23,7 @@ export const MyOrders = (props: any) => {
21
23
  const [isEmptyBusinesses, setIsEmptyBusinesses] = useState(false)
22
24
  const [businessOrderIds, setBusinessOrderIds] = useState([])
23
25
  const [ordersLength, setOrdersLength] = useState({
24
- activeOrdersLength: 0,
26
+ activeOrdersLength: null,
25
27
  previousOrdersLength: 0,
26
28
  });
27
29
  const [selectedOption, setSelectedOption] = useState(!hideOrders ? 'orders' : 'business')
@@ -33,6 +35,10 @@ export const MyOrders = (props: any) => {
33
35
  { key: 'business', value: t('BUSINESS', 'Business') },
34
36
  { key: 'products', value: t('PRODUCTS', 'Products') }
35
37
  ]
38
+ const isChewLayout = theme?.header?.components?.layout?.type === 'chew'
39
+ const showNavbar = theme?.bar_menu?.components?.orders?.hidden
40
+
41
+ const goToBack = () => navigation?.canGoBack() && navigation.goBack()
36
42
 
37
43
  const handleOnRefresh = () => {
38
44
  setRefreshOrders(true);
@@ -61,20 +67,59 @@ export const MyOrders = (props: any) => {
61
67
  });
62
68
 
63
69
  return (
64
- <Container noPadding refreshControl={
65
- <RefreshControl
66
- refreshing={refreshing}
67
- onRefresh={() => handleOnRefresh()}
68
- />
69
- }>
70
- {!hideOrders && (
70
+ <Container
71
+ noPadding
72
+ refreshControl={
73
+ <RefreshControl
74
+ refreshing={refreshing}
75
+ onRefresh={() => handleOnRefresh()}
76
+ />
77
+ }
78
+ >
79
+ {(isChewLayout || showNavbar) && (
80
+ <View style={{
81
+ ...{
82
+ width: '100%',
83
+ display: 'flex',
84
+ flexDirection: 'row',
85
+ alignItems: 'center',
86
+ paddingHorizontal: isChewLayout ? 20 : 40,
87
+ },
88
+ ...props.titleStyle
89
+ }}>
90
+ {!props.hideBackBtn && !isChewLayout && (
91
+ <OButton
92
+ imgLeftStyle={{ width: 18 }}
93
+ imgRightSrc={null}
94
+ style={{
95
+ borderWidth: 0,
96
+ width: 26,
97
+ height: 26,
98
+ backgroundColor: '#FFF',
99
+ borderColor: '#FFF',
100
+ shadowColor: '#FFF',
101
+ paddingLeft: 0,
102
+ paddingRight: 0
103
+ }}
104
+ onClick={goToBack}
105
+ icon={AntDesignIcon}
106
+ iconProps={{
107
+ name: 'arrowleft',
108
+ size: 26
109
+ }}
110
+ />
111
+ )}
112
+ <HeaderTitle ph={0} text={t('MY_ORDERS', 'My Orders')} />
113
+ </View>
114
+ )}
115
+ {!hideOrders && !isChewLayout && !showNavbar && (
71
116
  <HeaderTitle text={t('MY_ORDERS', 'My Orders')} />
72
117
  )}
73
118
  {!allEmpty && (
74
119
  <ScrollView
75
120
  horizontal
76
121
  style={{ ...styles.container, borderBottomWidth: 1 }}
77
- contentContainerStyle={{ paddingHorizontal: !!businessesSearchList ? 0 : 40 }}
122
+ contentContainerStyle={{ paddingHorizontal: !!businessesSearchList ? 0 : isChewLayout ? 20 : 40 }}
78
123
  showsHorizontalScrollIndicator={false}
79
124
  scrollEventThrottle={16}
80
125
  >
@@ -98,17 +143,19 @@ export const MyOrders = (props: any) => {
98
143
  )}
99
144
  {selectedOption === 'orders' && (
100
145
  <>
101
- <View style={{ paddingLeft: 40, paddingRight: 40 }}>
102
- <OrdersOption
103
- {...props}
104
- activeOrders
105
- ordersLength={ordersLength}
106
- setOrdersLength={setOrdersLength}
107
- setRefreshOrders={setRefreshOrders}
108
- refreshOrders={refreshOrders}
109
- />
110
- </View>
111
- <View style={{ paddingLeft: 40, paddingRight: 40 }}>
146
+ {ordersLength?.activeOrdersLength !== 0 && (
147
+ <View style={{ paddingHorizontal: isChewLayout ? 20 : 40 }}>
148
+ <OrdersOption
149
+ {...props}
150
+ activeOrders
151
+ ordersLength={ordersLength}
152
+ setOrdersLength={setOrdersLength}
153
+ setRefreshOrders={setRefreshOrders}
154
+ refreshOrders={refreshOrders}
155
+ />
156
+ </View>
157
+ )}
158
+ <View style={{ paddingHorizontal: isChewLayout ? 20 : 40 }}>
112
159
  <OrdersOption
113
160
  {...props}
114
161
  ordersLength={ordersLength}
@@ -119,14 +166,31 @@ export const MyOrders = (props: any) => {
119
166
  </View>
120
167
  </>
121
168
  )}
122
- {notOrderOptions.includes(selectedOption) && (
169
+ {selectedOption === 'business' && (
170
+ <OrdersOption
171
+ {...props}
172
+ isBusiness
173
+ titleContent={t('PREVIOUSLY_ORDERED', 'Previously ordered')}
174
+ hideOrders
175
+ horizontal
176
+ activeOrders
177
+ pastOrders
178
+ preOrders
179
+ businessesSearchList={businessesSearchList}
180
+ setIsEmptyBusinesses={setIsEmptyBusinesses}
181
+ businessOrderIds={businessOrderIds}
182
+ setBusinessOrderIds={setBusinessOrderIds}
183
+ ordersLength={ordersLength}
184
+ setOrdersLength={setOrdersLength}
185
+ />
186
+ )}
187
+ {selectedOption === 'products' && (
123
188
  <OrdersOption
124
189
  {...props}
190
+ isProducts
125
191
  titleContent={t('PREVIOUSLY_ORDERED', 'Previously ordered')}
126
192
  hideOrders
127
193
  horizontal
128
- isBusiness={selectedOption === 'business'}
129
- isProducts={selectedOption === 'products'}
130
194
  activeOrders
131
195
  pastOrders
132
196
  preOrders
@@ -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,11 +63,16 @@ 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}
66
+ imgLeftSrc={props.leftImg}
65
67
  imgLeftStyle={{ width: 18 }}
66
68
  imgRightSrc={null}
67
69
  style={{ ...btnBackArrow, ...props.btnStyle, ...props.isVertical ? (I18nManager.isRTL ? { paddingRight: 0 } : { paddingLeft: 0 }) : {} }}
68
70
  onClick={props?.onActionLeft}
71
+ icon={AntDesignIcon}
72
+ iconProps={{
73
+ name: 'arrowleft',
74
+ size: 26
75
+ }}
69
76
  />
70
77
  <TitleTopWrapper>
71
78
  {props.withIcon
@@ -90,10 +97,9 @@ const NavBar = (props: Props) => {
90
97
  style={
91
98
  {
92
99
  textAlign: props.titleAlign ? props.titleAlign : 'center',
93
- marginRight: props.showCall ? 0 : 40,
100
+ marginRight: (props.showCall || !!props.noMargin) ? 0 : 40,
94
101
  color: props.titleColor || theme.colors.textNormal,
95
102
  paddingHorizontal: props.titleAlign == 'left' ? 12 : 0,
96
- width: '100%',
97
103
  ...props.titleStyle,
98
104
  }
99
105
  }
@@ -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,148 @@
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 } from './styles'
11
+ import { Platform, 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 { Container } from '../../layouts/Container'
17
+ import NavBar from '../NavBar'
18
+ import { OText } from '../shared'
19
+
20
+ const NotificationsUI = (props: any) => {
21
+ const {
22
+ navigation,
23
+ singleNotifications,
24
+ handleChangePromotions,
25
+ userData
26
+ } = props
27
+
28
+ const theme = useTheme();
29
+ const [{ user: userSession }] = useSession()
30
+ const [, t] = useLanguage();
31
+ const [, { showToast }] = useToast();
32
+ const [orderingTheme] = useOrderingTheme()
33
+
34
+ const user = userData || userSession
35
+
36
+ const [notificationsList, setNotificationsList] = useState({
37
+ email: singleNotifications?.result?.result
38
+ ? !!singleNotifications?.result?.result?.settings?.email?.newsletter
39
+ : !!(singleNotifications?.changes?.settings?.email?.newsletter ?? (user && user?.settings?.email?.newsletter)),
40
+ sms: singleNotifications?.result?.result
41
+ ? !!singleNotifications?.result?.result?.settings?.sms?.newsletter
42
+ : !!(singleNotifications?.changes?.settings?.sms?.newsletter ?? (user && user?.settings?.sms?.newsletter)),
43
+ notification: singleNotifications?.result?.result
44
+ ? !!singleNotifications?.result?.result?.settings?.notification?.newsletter
45
+ : !!(singleNotifications?.changes?.settings?.notification?.newsletter ?? (user && user?.settings?.notification?.newsletter))
46
+ })
47
+
48
+ const goToBack = () => navigation?.canGoBack() && navigation.goBack()
49
+ const showCustomerPromotions = !orderingTheme?.theme?.profile?.components?.promotions?.hidden
50
+ const showNotifications = !orderingTheme?.theme?.profile?.components?.notification_settings?.hidden
51
+
52
+ const handleEditNotifications = (key: any, value: any) => {
53
+ setNotificationsList({
54
+ ...notificationsList,
55
+ [key]: value
56
+ })
57
+ }
58
+
59
+ useEffect(() => {
60
+ if (singleNotifications.result.result && !singleNotifications.loading) {
61
+ if (!singleNotifications.result?.error) {
62
+ showToast(ToastType.Success, t('UPDATE_SUCCESSFULLY', 'Update successfully'));
63
+ }
64
+ }
65
+ }, [singleNotifications.result])
66
+
67
+ useEffect(() => {
68
+ const isSingle = true
69
+ handleChangePromotions(notificationsList, isSingle)
70
+ }, [notificationsList])
71
+
72
+ return (
73
+ <Container noPadding>
74
+ <NavBar
75
+ title={t('NOTIFICATIONS', 'Notifications')}
76
+ titleAlign={'center'}
77
+ onActionLeft={goToBack}
78
+ showCall={false}
79
+ style={{ paddingHorizontal: 40, paddingVertical: Platform.OS === 'ios' ? 0 : 20, marginTop: Platform.OS === 'ios' ? 0 : 30 }}
80
+ />
81
+ {showCustomerPromotions && showNotifications && (
82
+ <>
83
+ <Spinner visible={singleNotifications?.loading} />
84
+ <View style={{ ...styles.pagePadding }}>
85
+ <NotificationsGroupSwitchWrapper>
86
+ <OText style={{ ...styles.title }}>{t('MARKETING_NOTIFICATIONS', 'Marketing Notifications')}</OText>
87
+ <SwitchWrapper>
88
+ <OText>{t('EMAILS', 'Emails')}</OText>
89
+ <ToggleSwitch
90
+ isOn={notificationsList?.email}
91
+ onColor={theme.colors.primary}
92
+ size="small"
93
+ disabled={singleNotifications?.loading}
94
+ offColor={theme.colors.disabled}
95
+ animationSpeed={400}
96
+ onToggle={() => handleEditNotifications('email', !notificationsList?.email)}
97
+ />
98
+ </SwitchWrapper>
99
+ <SwitchWrapper>
100
+ <OText>{t('SMS', 'Sms')}</OText>
101
+ <ToggleSwitch
102
+ isOn={notificationsList?.sms}
103
+ onColor={theme.colors.primary}
104
+ size="small"
105
+ disabled={singleNotifications?.loading}
106
+ offColor={theme.colors.disabled}
107
+ animationSpeed={400}
108
+ onToggle={() => handleEditNotifications('sms', !notificationsList?.sms)}
109
+ />
110
+ </SwitchWrapper>
111
+ <SwitchWrapper>
112
+ <OText>{t('PUSH_NOTIFICATIONS', 'Push Notifications')}</OText>
113
+ <ToggleSwitch
114
+ isOn={notificationsList?.notification}
115
+ onColor={theme.colors.primary}
116
+ size="small"
117
+ disabled={singleNotifications?.loading}
118
+ offColor={theme.colors.disabled}
119
+ animationSpeed={400}
120
+ onToggle={() => handleEditNotifications('notification', !notificationsList?.notification)}
121
+ />
122
+ </SwitchWrapper>
123
+ </NotificationsGroupSwitchWrapper>
124
+ </View>
125
+ </>
126
+ )}
127
+ </Container>
128
+ )
129
+ }
130
+
131
+ const styles = StyleSheet.create({
132
+ title: {
133
+ marginBottom: 24,
134
+ fontWeight: 'bold',
135
+ },
136
+ pagePadding: {
137
+ paddingLeft: 40,
138
+ paddingRight: 40
139
+ }
140
+ });
141
+
142
+ export const NotificationsList = (props: any) => {
143
+ const notificationsListProps = {
144
+ ...props,
145
+ UIComponent: NotificationsUI
146
+ }
147
+ return <NotificationsController {...notificationsListProps} />
148
+ }
@@ -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,
@@ -30,7 +31,9 @@ import {
30
31
  OrderDriver,
31
32
  Map,
32
33
  Divider,
33
- OrderAction
34
+ OrderAction,
35
+ PlaceSpotWrapper,
36
+ ProfessionalPhoto
34
37
  } from './styles';
35
38
  import { OButton, OIcon, OModal, OText } from '../shared';
36
39
  import { ProductItemAccordion } from '../ProductItemAccordion';
@@ -44,6 +47,7 @@ import { TaxInformation } from '../TaxInformation';
44
47
  import { Placeholder, PlaceholderLine } from 'rn-placeholder';
45
48
  import NavBar from '../NavBar'
46
49
  import { OrderHistory } from './OrderHistory';
50
+ import { PlaceSpot } from '../PlaceSpot'
47
51
  export const OrderDetailsUI = (props: OrderDetailsParams) => {
48
52
  const {
49
53
  navigation,
@@ -66,6 +70,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
66
70
  },
67
71
  statusBar: {
68
72
  height: 12,
73
+ borderRadius: 8
69
74
  },
70
75
  logo: {
71
76
  width: 75,
@@ -91,6 +96,12 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
91
96
  display: 'flex',
92
97
  alignItems: 'center',
93
98
  flexDirection: 'row'
99
+ },
100
+ professionalBlock: {
101
+ borderBottomColor: theme.colors.border,
102
+ borderBottomWidth: 1,
103
+ marginVertical: 10,
104
+ paddingVertical: 5
94
105
  }
95
106
  });
96
107
 
@@ -105,6 +116,9 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
105
116
  const [refreshing] = useState(false);
106
117
  const { order, businessData } = props.order;
107
118
  const mapValidStatuses = [9, 19, 23]
119
+ const placeSpotTypes = [3, 4, 5]
120
+ const directionTypes = [2, 3, 4, 5]
121
+ const enabledPoweredByOrdering = configs?.powered_by_ordering_module?.value
108
122
 
109
123
  const walletName: any = {
110
124
  cash: {
@@ -444,6 +458,59 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
444
458
  lng: parseFloat(location?.location?.split(',')[1].replace(/[^-.0-9]/g, ''))
445
459
  } : location)
446
460
 
461
+ const getProductList = () => {
462
+ const professionalList = order?.products.reduce((prev: any, current: any) => {
463
+ const found = prev.find((item: any) => item.id === current?.calendar_event?.professional?.id)
464
+ if (found || !current?.calendar_event) {
465
+ return prev
466
+ }
467
+ return [...prev, current?.calendar_event?.professional]
468
+ }, [])
469
+
470
+ return (
471
+ <>
472
+ {professionalList?.length > 0 && professionalList.map((professional: any, i: number) => (
473
+ <View key={i} style={styles.professionalBlock}>
474
+ <View style={{ flexDirection: 'row', alignItems: 'center', width: '100%' }}>
475
+ {professional?.photo ? (
476
+ <ProfessionalPhoto
477
+ source={{
478
+ uri: professional?.photo
479
+ }}
480
+ imageStyle={{ borderRadius: 8 }}
481
+ />
482
+ ) : (
483
+ <OIcon
484
+ src={theme.images.general.user}
485
+ cover={false}
486
+ width={80}
487
+ height={80}
488
+ />
489
+ )}
490
+ <OText size={12} lineHeight={18} weight={'500'} numberOfLines={1}>{professional?.name} {professional?.lastname}</OText>
491
+ </View>
492
+ {order?.products.filter((product: any) => product?.calendar_event?.professional?.id === professional?.id).map((product: any, i: number) => (
493
+ <ProductItemAccordion
494
+ key={product?.id || i}
495
+ product={product}
496
+ isFromCheckout
497
+ />
498
+ ))}
499
+ </View>
500
+ ))}
501
+ {order?.products.filter((product: any) => !product?.calendar_event).map((product: any, i: number) => (
502
+ <ProductItemAccordion
503
+ key={product?.id || i}
504
+ product={product}
505
+ isFromCheckout
506
+ />
507
+ ))}
508
+ </>
509
+ )
510
+ }
511
+
512
+ const sortedProductList = useMemo(() => getProductList(), [order?.products])
513
+
447
514
  useEffect(() => {
448
515
  if (driverLocation) {
449
516
  parsedLocations[0] = {
@@ -533,6 +600,13 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
533
600
  : parseDate(order?.delivery_datetime, { utc: false })}
534
601
  </OText>}
535
602
  />
603
+ {enabledPoweredByOrdering && (
604
+ <View style={{ display: 'flex', justifyContent: 'center', alignItems: 'center' }}>
605
+ <OText>
606
+ Powered By Ordering.co
607
+ </OText>
608
+ </View>
609
+ )}
536
610
  <OrderInfo>
537
611
  <OrderData>
538
612
  <View style={styles.linkWrapper}>
@@ -548,7 +622,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
548
622
  onPress={() => handleClickOrderReview(order)}
549
623
  >
550
624
  <OText
551
- size={10}
625
+ size={12}
552
626
  lineHeight={15}
553
627
  color={theme.colors.primary}
554
628
  style={{ textDecorationLine: 'underline' }}
@@ -564,7 +638,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
564
638
 
565
639
  >
566
640
  <OText
567
- size={10}
641
+ size={12}
568
642
  lineHeight={15}
569
643
  color={theme.colors.primary}
570
644
  style={{ textDecorationLine: 'underline', textTransform: 'capitalize' }}
@@ -679,7 +753,39 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
679
753
  {order?.business?.address}
680
754
  </OText>
681
755
  </View>
756
+ {directionTypes.includes(order?.delivery_type) && (
757
+ <OButton
758
+ text={t('GET_DIRECTIONS', 'Get Directions')}
759
+ imgRightSrc=''
760
+ textStyle={{ color: theme.colors.white }}
761
+ style={{
762
+ alignSelf: 'center',
763
+ borderRadius: 10,
764
+ marginTop: 30
765
+ }}
766
+ onClick={() => showLocation({
767
+ latitude: order?.business?.location?.lat,
768
+ longitude: order?.business?.location?.lng,
769
+ naverCallerName: 'com.reactnativeappstemplate5',
770
+ dialogTitle: t('GET_DIRECTIONS', 'Get Directions'),
771
+ dialogMessage: t('WHAT_APP_WOULD_YOU_USE', 'What app would you like to use?'),
772
+ cancelText: t('CANCEL', 'Cancel'),
773
+ })}
774
+ />
775
+ )}
682
776
  </OrderBusiness>
777
+
778
+ {placeSpotTypes.includes(order?.delivery_type) && (
779
+ <PlaceSpotWrapper>
780
+ <PlaceSpot
781
+ isInputMode
782
+ cart={order}
783
+ spotNumberDefault={order?.spot_number}
784
+ vehicleDefault={order?.vehicle}
785
+ />
786
+ </PlaceSpotWrapper>
787
+ )}
788
+
683
789
  <View
684
790
  style={{
685
791
  height: 8,
@@ -746,7 +852,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
746
852
  <>
747
853
  {order?.driver?.location && mapValidStatuses.includes(parseInt(order?.status)) && (
748
854
  <Map>
749
- <GoogleMap
855
+ <GoogleMap
750
856
  location={typeof order?.driver?.location?.location === 'string'
751
857
  ? {
752
858
  lat: parseFloat(driverLocationString[0]),
@@ -860,14 +966,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
860
966
  </OrderAction>
861
967
  </HeaderInfo>
862
968
  <OrderProducts>
863
- {order?.products?.length &&
864
- order?.products.map((product: any, i: number) => (
865
- <ProductItemAccordion
866
- key={product?.id || i}
867
- product={product}
868
- isFromCheckout
869
- />
870
- ))}
969
+ {sortedProductList}
871
970
  </OrderProducts>
872
971
  <OrderBill>
873
972
  <View style={{ height: 1, backgroundColor: theme.colors.border, marginBottom: 17 }} />
@@ -1035,8 +1134,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
1035
1134
  )}
1036
1135
  <Total>
1037
1136
  <Table>
1038
- <OText size={20} lineHeight={30} weight={'600'} color={theme.colors.textNormal}>{t('TOTAL', 'Total')}</OText>
1039
- <OText size={20} lineHeight={30} weight={'600'} color={theme.colors.textNormal}>
1137
+ <OText size={14} style={{ fontWeight: 'bold' }} color={theme.colors.textNormal}>{t('TOTAL', 'Total')}</OText>
1138
+ <OText size={14} style={{ fontWeight: 'bold' }} color={theme.colors.textNormal}>
1040
1139
  {parsePrice(order?.summary?.total ?? order?.total)}
1041
1140
  </OText>
1042
1141
  </Table>