ordering-ui-react-native 0.16.67 → 0.16.68-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 (206) 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 +19 -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 +119 -120
  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 +31 -31
  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 +14 -3
  31. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  32. package/themes/business/src/components/NewOrderNotification/index.tsx +31 -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 +74 -76
  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/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/OText.tsx +8 -2
  56. package/themes/business/src/types/index.tsx +22 -10
  57. package/themes/business/src/utils/index.tsx +10 -0
  58. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  59. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  60. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  61. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  62. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  63. package/themes/kiosk/src/components/LoginForm/index.tsx +121 -10
  64. package/themes/kiosk/src/components/LoginForm/styles.tsx +5 -0
  65. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  66. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  67. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  68. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  69. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  70. package/themes/kiosk/src/types/index.d.ts +2 -0
  71. package/themes/original/index.tsx +8 -0
  72. package/themes/original/src/components/AddressDetails/index.tsx +10 -8
  73. package/themes/original/src/components/AddressForm/index.tsx +153 -137
  74. package/themes/original/src/components/AddressList/index.tsx +18 -18
  75. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  76. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  77. package/themes/original/src/components/BusinessBasicInformation/index.tsx +49 -33
  78. package/themes/original/src/components/BusinessController/index.tsx +101 -70
  79. package/themes/original/src/components/BusinessController/styles.tsx +14 -9
  80. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  81. package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -6
  82. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  83. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  84. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  85. package/themes/original/src/components/BusinessListingSearch/index.tsx +87 -142
  86. package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
  87. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  88. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  89. package/themes/original/src/components/BusinessProductsList/index.tsx +54 -60
  90. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  91. package/themes/original/src/components/BusinessProductsListing/index.tsx +561 -477
  92. package/themes/original/src/components/BusinessProductsListing/styles.tsx +13 -12
  93. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
  94. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  95. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +93 -98
  96. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  97. package/themes/original/src/components/BusinessesListing/index.tsx +13 -8
  98. package/themes/original/src/components/Cart/index.tsx +63 -38
  99. package/themes/original/src/components/CartContent/index.tsx +80 -18
  100. package/themes/original/src/components/CartContent/styles.tsx +11 -1
  101. package/themes/original/src/components/Checkout/index.tsx +110 -114
  102. package/themes/original/src/components/Checkout/styles.tsx +4 -3
  103. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  104. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  105. package/themes/original/src/components/DriverTips/index.tsx +47 -37
  106. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  107. package/themes/original/src/components/Favorite/index.tsx +7 -4
  108. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  109. package/themes/original/src/components/FavoriteList/index.tsx +69 -45
  110. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  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/Help/index.tsx +7 -7
  116. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +14 -20
  117. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  118. package/themes/original/src/components/HelpGuide/index.tsx +12 -11
  119. package/themes/original/src/components/HelpGuide/styles.tsx +5 -0
  120. package/themes/original/src/components/HelpOrder/index.tsx +12 -20
  121. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  122. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  123. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  124. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  125. package/themes/original/src/components/LoginForm/index.tsx +98 -41
  126. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  127. package/themes/original/src/components/MessageListing/index.tsx +7 -7
  128. package/themes/original/src/components/Messages/index.tsx +35 -20
  129. package/themes/original/src/components/MomentOption/index.tsx +17 -11
  130. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  131. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
  132. package/themes/original/src/components/MultiCheckout/index.tsx +158 -77
  133. package/themes/original/src/components/MultiOrdersDetails/index.tsx +60 -33
  134. package/themes/original/src/components/MyOrders/index.tsx +86 -20
  135. package/themes/original/src/components/NavBar/index.tsx +7 -6
  136. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  137. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  138. package/themes/original/src/components/Notifications/index.tsx +144 -0
  139. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  140. package/themes/original/src/components/OrderDetails/index.tsx +114 -15
  141. package/themes/original/src/components/OrderDetails/styles.tsx +15 -2
  142. package/themes/original/src/components/OrderItAgain/index.tsx +75 -0
  143. package/themes/original/src/components/OrderItAgain/styles.tsx +10 -0
  144. package/themes/original/src/components/OrderProgress/index.tsx +77 -66
  145. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  146. package/themes/original/src/components/OrderSummary/index.tsx +3 -36
  147. package/themes/original/src/components/OrderTypeSelector/index.tsx +13 -6
  148. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +94 -98
  149. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  150. package/themes/original/src/components/OrdersOption/index.tsx +97 -55
  151. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  152. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  153. package/themes/original/src/components/PaymentOptions/index.tsx +1 -2
  154. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  155. package/themes/original/src/components/PlaceSpot/index.tsx +249 -47
  156. package/themes/original/src/components/PlaceSpot/styles.tsx +0 -2
  157. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  158. package/themes/original/src/components/ProductForm/index.tsx +212 -253
  159. package/themes/original/src/components/ProductForm/styles.tsx +5 -8
  160. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  161. package/themes/original/src/components/ProductOptionSubOption/index.tsx +17 -9
  162. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +0 -1
  163. package/themes/original/src/components/ProfessionalFilter/index.tsx +2 -1
  164. package/themes/original/src/components/ProfessionalProfile/index.tsx +19 -8
  165. package/themes/original/src/components/Promotions/index.tsx +234 -220
  166. package/themes/original/src/components/Promotions/styles.tsx +7 -2
  167. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  168. package/themes/original/src/components/ReviewOrder/index.tsx +43 -11
  169. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  170. package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
  171. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  172. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  173. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  174. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  175. package/themes/original/src/components/ServiceForm/index.tsx +328 -264
  176. package/themes/original/src/components/SignupForm/index.tsx +134 -89
  177. package/themes/original/src/components/SingleOrderCard/index.tsx +129 -54
  178. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  179. package/themes/original/src/components/SingleProductCard/index.tsx +101 -85
  180. package/themes/original/src/components/SingleProductCard/styles.tsx +2 -9
  181. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  182. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  183. package/themes/original/src/components/StripeCardsList/index.tsx +1 -1
  184. package/themes/original/src/components/StripeElementsForm/index.tsx +13 -2
  185. package/themes/original/src/components/UpsellingProducts/index.tsx +244 -215
  186. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  187. package/themes/original/src/components/UserDetails/index.tsx +5 -3
  188. package/themes/original/src/components/UserFormDetails/index.tsx +6 -48
  189. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  190. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  191. package/themes/original/src/components/UserProfileForm/index.tsx +19 -28
  192. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  193. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  194. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  195. package/themes/original/src/components/Wallets/index.tsx +176 -164
  196. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  197. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  198. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  199. package/themes/original/src/components/shared/OBottomPopup.tsx +6 -4
  200. package/themes/original/src/components/shared/OButton.tsx +9 -4
  201. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  202. package/themes/original/src/components/shared/OInput.tsx +10 -1
  203. package/themes/original/src/layouts/Container.tsx +13 -9
  204. package/themes/original/src/types/index.tsx +55 -5
  205. package/themes/original/src/utils/index.tsx +103 -58
  206. 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,18 +23,25 @@ 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')
28
30
 
29
31
  const notOrderOptions = ['business', 'products']
30
32
  const allEmpty = (ordersLength?.activeOrdersLength === 0 && ordersLength?.previousOrdersLength === 0) || ((isEmptyBusinesses || businessOrderIds?.length === 0) && hideOrders)
33
+
34
+ const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
35
+ const showNavbar = theme?.bar_menu?.components?.orders?.hidden
36
+ const hideOrdersTheme = theme?.bar_menu?.components?.orders?.hidden
37
+ const hideProductsTab = theme?.orders?.components?.products_tab?.hidden
38
+ const hideBusinessTab = theme?.orders?.components?.business_tab?.hidden
31
39
  const MyOrdersMenu = [
32
- { key: 'orders', value: t('ORDERS', 'Orders') },
33
- { key: 'business', value: t('BUSINESS', 'Business') },
34
- { key: 'products', value: t('PRODUCTS', 'Products') }
40
+ { key: 'orders', value: t('ORDERS', 'Orders'), disabled: false },
41
+ { key: 'business', value: t('BUSINESS', 'Business'), disabled: hideBusinessTab },
42
+ { key: 'products', value: t('PRODUCTS', 'Products'), disabled: hideProductsTab }
35
43
  ]
44
+ const goToBack = () => navigation?.canGoBack() && navigation.goBack()
36
45
 
37
46
  const handleOnRefresh = () => {
38
47
  setRefreshOrders(true);
@@ -61,24 +70,64 @@ export const MyOrders = (props: any) => {
61
70
  });
62
71
 
63
72
  return (
64
- <Container noPadding refreshControl={
65
- <RefreshControl
66
- refreshing={refreshing}
67
- onRefresh={() => handleOnRefresh()}
68
- />
69
- }>
70
- {!hideOrders && (
73
+ <Container
74
+ noPadding
75
+ refreshControl={
76
+ <RefreshControl
77
+ refreshing={refreshing}
78
+ onRefresh={() => handleOnRefresh()}
79
+ />
80
+ }
81
+ >
82
+ {(isChewLayout || showNavbar) && (
83
+ <View style={{
84
+ ...{
85
+ width: '100%',
86
+ display: 'flex',
87
+ flexDirection: 'row',
88
+ alignItems: 'center',
89
+ paddingHorizontal: isChewLayout ? 20 : 40,
90
+ },
91
+ ...props.titleStyle
92
+ }}>
93
+ {!props.hideBackBtn && (!isChewLayout || (isChewLayout && hideOrdersTheme)) && (
94
+ <OButton
95
+ imgLeftStyle={{ width: 18 }}
96
+ imgRightSrc={null}
97
+ style={{
98
+ borderWidth: 0,
99
+ width: 26,
100
+ height: 26,
101
+ backgroundColor: '#FFF',
102
+ borderColor: '#FFF',
103
+ shadowColor: '#FFF',
104
+ paddingLeft: 0,
105
+ paddingRight: 0,
106
+ marginTop: 30,
107
+ }}
108
+ onClick={goToBack}
109
+ icon={AntDesignIcon}
110
+ iconProps={{
111
+ name: 'arrowleft',
112
+ size: 26
113
+ }}
114
+ />
115
+ )}
116
+ <HeaderTitle ph={10} text={t('MY_ORDERS', 'My Orders')} />
117
+ </View>
118
+ )}
119
+ {!hideOrders && !isChewLayout && !showNavbar && (
71
120
  <HeaderTitle text={t('MY_ORDERS', 'My Orders')} />
72
121
  )}
73
122
  {!allEmpty && (
74
123
  <ScrollView
75
124
  horizontal
76
125
  style={{ ...styles.container, borderBottomWidth: 1 }}
77
- contentContainerStyle={{ paddingHorizontal: !!businessesSearchList ? 0 : 40 }}
126
+ contentContainerStyle={{ paddingHorizontal: !!businessesSearchList ? 0 : isChewLayout ? 20 : 40 }}
78
127
  showsHorizontalScrollIndicator={false}
79
128
  scrollEventThrottle={16}
80
129
  >
81
- {MyOrdersMenu.filter(option => !hideOrders || option.key !== 'orders').map(option => (
130
+ {MyOrdersMenu.filter(option => (!hideOrders || option.key !== 'orders') && !option.disabled).map(option => (
82
131
  <Tab
83
132
  key={option.key}
84
133
  onPress={() => setSelectedOption(option.key)}
@@ -98,7 +147,7 @@ export const MyOrders = (props: any) => {
98
147
  )}
99
148
  {selectedOption === 'orders' && (
100
149
  <>
101
- <View style={{ paddingLeft: 40, paddingRight: 40 }}>
150
+ <View style={{ paddingHorizontal: isChewLayout ? 20 : 40 }}>
102
151
  <OrdersOption
103
152
  {...props}
104
153
  activeOrders
@@ -108,7 +157,7 @@ export const MyOrders = (props: any) => {
108
157
  refreshOrders={refreshOrders}
109
158
  />
110
159
  </View>
111
- <View style={{ paddingLeft: 40, paddingRight: 40 }}>
160
+ <View style={{ paddingHorizontal: isChewLayout ? 20 : 40 }}>
112
161
  <OrdersOption
113
162
  {...props}
114
163
  ordersLength={ordersLength}
@@ -119,14 +168,31 @@ export const MyOrders = (props: any) => {
119
168
  </View>
120
169
  </>
121
170
  )}
122
- {notOrderOptions.includes(selectedOption) && (
171
+ {selectedOption === 'business' && (
172
+ <OrdersOption
173
+ {...props}
174
+ isBusiness
175
+ titleContent={t('PREVIOUSLY_ORDERED', 'Previously ordered')}
176
+ hideOrders
177
+ horizontal
178
+ activeOrders
179
+ pastOrders
180
+ preOrders
181
+ businessesSearchList={businessesSearchList}
182
+ setIsEmptyBusinesses={setIsEmptyBusinesses}
183
+ businessOrderIds={businessOrderIds}
184
+ setBusinessOrderIds={setBusinessOrderIds}
185
+ ordersLength={ordersLength}
186
+ setOrdersLength={setOrdersLength}
187
+ />
188
+ )}
189
+ {selectedOption === 'products' && (
123
190
  <OrdersOption
124
191
  {...props}
192
+ isProducts
125
193
  titleContent={t('PREVIOUSLY_ORDERED', 'Previously ordered')}
126
194
  hideOrders
127
195
  horizontal
128
- isBusiness={selectedOption === 'business'}
129
- isProducts={selectedOption === 'products'}
130
196
  activeOrders
131
197
  pastOrders
132
198
  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,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,
@@ -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>
@@ -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,18 @@ 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
+ `
134
+
135
+ export const ProfessionalPhoto = styled.ImageBackground`
136
+ width: 100%;
137
+ position: relative;
138
+ max-height: 80px;
139
+ height: 80px;
140
+ width: 80px;
141
+ resize-mode: cover;
142
+ margin-right: 10px;
143
+ `;