ordering-ui-react-native 0.16.29 → 0.16.30-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 (203) hide show
  1. package/package.json +8 -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/AddressForm/index.tsx +18 -2
  6. package/src/components/BusinessBasicInformation/index.tsx +11 -19
  7. package/src/components/BusinessInformation/index.tsx +33 -4
  8. package/src/components/BusinessInformation/styles.tsx +2 -2
  9. package/src/components/BusinessProductsList/index.tsx +10 -10
  10. package/src/components/BusinessesListing/index.tsx +1 -1
  11. package/src/components/Checkout/index.tsx +2 -1
  12. package/src/components/LanguageSelector/index.tsx +21 -16
  13. package/src/components/LoginForm/index.tsx +15 -0
  14. package/src/components/Messages/index.tsx +2 -2
  15. package/src/components/NotificationSetting/index.tsx +85 -0
  16. package/src/components/OrderDetails/index.tsx +2 -20
  17. package/src/components/OrdersOption/index.tsx +54 -56
  18. package/src/components/PaymentOptions/index.tsx +335 -365
  19. package/src/components/PaymentOptionsWebView/index.tsx +120 -121
  20. package/src/components/ReviewDriver/index.tsx +1 -1
  21. package/src/components/ReviewOrder/index.tsx +2 -1
  22. package/src/components/ReviewProducts/index.tsx +11 -0
  23. package/src/components/SignupForm/index.tsx +15 -0
  24. package/src/components/SingleProductReview/index.tsx +8 -5
  25. package/src/components/StripeElementsForm/index.tsx +25 -16
  26. package/src/components/VerifyPhone/styles.tsx +1 -2
  27. package/src/components/shared/OBottomPopup.tsx +6 -2
  28. package/src/index.tsx +2 -0
  29. package/src/pages/BusinessesListing.tsx +7 -6
  30. package/src/pages/OrderDetails.tsx +1 -1
  31. package/src/pages/ReviewDriver.tsx +2 -2
  32. package/src/pages/ReviewOrder.tsx +2 -2
  33. package/src/types/@fatnlazycat/react-native-recaptcha-v3/index.d.ts +1 -0
  34. package/src/utils/index.tsx +0 -1
  35. package/themes/business/index.tsx +4 -0
  36. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  37. package/themes/business/src/components/Chat/index.tsx +42 -34
  38. package/themes/business/src/components/DriverMap/index.tsx +7 -5
  39. package/themes/business/src/components/DriverSchedule/index.tsx +71 -0
  40. package/themes/business/src/components/DriverSchedule/styles.tsx +6 -0
  41. package/themes/business/src/components/LoginForm/index.tsx +111 -74
  42. package/themes/business/src/components/MapView/index.tsx +12 -1
  43. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  44. package/themes/business/src/components/NewOrderNotification/index.tsx +26 -41
  45. package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
  46. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +25 -19
  47. package/themes/business/src/components/OrdersListManager/index.tsx +10 -3
  48. package/themes/business/src/components/OrdersOption/index.tsx +65 -21
  49. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  50. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  51. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  52. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  53. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  54. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  55. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  56. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  57. package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
  58. package/themes/business/src/components/PreviousOrders/index.tsx +21 -23
  59. package/themes/business/src/components/ProductItemAccordion/index.tsx +3 -2
  60. package/themes/business/src/components/ReviewCustomer/index.tsx +1 -1
  61. package/themes/business/src/components/ScheduleBlocked/index.tsx +53 -0
  62. package/themes/business/src/components/UserFormDetails/index.tsx +5 -2
  63. package/themes/business/src/components/UserProfileForm/index.tsx +28 -4
  64. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  65. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  66. package/themes/business/src/components/shared/OModal.tsx +40 -37
  67. package/themes/business/src/types/index.tsx +15 -9
  68. package/themes/business/src/utils/index.tsx +10 -0
  69. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  70. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  71. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  72. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  73. package/themes/kiosk/src/components/LoginForm/index.tsx +121 -10
  74. package/themes/kiosk/src/components/LoginForm/styles.tsx +5 -0
  75. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  76. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  77. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  78. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  79. package/themes/kiosk/src/types/index.d.ts +2 -0
  80. package/themes/original/index.tsx +12 -0
  81. package/themes/original/src/components/AddressDetails/index.tsx +1 -1
  82. package/themes/original/src/components/AddressForm/index.tsx +139 -135
  83. package/themes/original/src/components/AddressList/index.tsx +1 -1
  84. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  85. package/themes/original/src/components/BusinessBasicInformation/index.tsx +311 -161
  86. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +6 -2
  87. package/themes/original/src/components/BusinessController/index.tsx +190 -113
  88. package/themes/original/src/components/BusinessController/styles.tsx +0 -7
  89. package/themes/original/src/components/BusinessItemAccordion/index.tsx +4 -4
  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 +80 -128
  94. package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
  95. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  96. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  97. package/themes/original/src/components/BusinessProductsList/index.tsx +49 -52
  98. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  99. package/themes/original/src/components/BusinessProductsListing/index.tsx +293 -177
  100. package/themes/original/src/components/BusinessProductsListing/styles.tsx +23 -11
  101. package/themes/original/src/components/BusinessReviews/index.tsx +6 -1
  102. package/themes/original/src/components/BusinessTypeFilter/index.tsx +109 -40
  103. package/themes/original/src/components/BusinessTypeFilter/styles.tsx +2 -0
  104. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +561 -0
  105. package/themes/original/src/components/BusinessesListing/{styles.tsx → Layout/Appointment/styles.tsx} +24 -10
  106. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +676 -0
  107. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +137 -0
  108. package/themes/original/src/components/BusinessesListing/index.tsx +105 -519
  109. package/themes/original/src/components/Cart/index.tsx +44 -12
  110. package/themes/original/src/components/Cart/styles.tsx +4 -0
  111. package/themes/original/src/components/CartContent/index.tsx +22 -16
  112. package/themes/original/src/components/Checkout/index.tsx +101 -61
  113. package/themes/original/src/components/Checkout/styles.tsx +0 -1
  114. package/themes/original/src/components/DriverTips/index.tsx +4 -4
  115. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  116. package/themes/original/src/components/Favorite/index.tsx +1 -0
  117. package/themes/original/src/components/FavoriteList/index.tsx +32 -2
  118. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  119. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  120. package/themes/original/src/components/GoogleMap/index.tsx +20 -12
  121. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +25 -10
  122. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +4 -0
  123. package/themes/original/src/components/HelpGuide/index.tsx +9 -8
  124. package/themes/original/src/components/HelpOrder/index.tsx +9 -8
  125. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  126. package/themes/original/src/components/LoginForm/Otp/index.tsx +95 -72
  127. package/themes/original/src/components/LoginForm/index.tsx +83 -45
  128. package/themes/original/src/components/LottieAnimation/index.tsx +69 -0
  129. package/themes/original/src/components/Messages/index.tsx +17 -17
  130. package/themes/original/src/components/MomentOption/index.tsx +1 -1
  131. package/themes/original/src/components/MomentSelector/index.tsx +197 -0
  132. package/themes/original/src/components/MomentSelector/styles.tsx +6 -0
  133. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -92
  134. package/themes/original/src/components/MultiCheckout/index.tsx +6 -0
  135. package/themes/original/src/components/MultiOrdersDetails/index.tsx +20 -16
  136. package/themes/original/src/components/MyOrders/index.tsx +70 -6
  137. package/themes/original/src/components/NavBar/index.tsx +15 -9
  138. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  139. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  140. package/themes/original/src/components/Notifications/index.tsx +148 -0
  141. package/themes/original/src/components/Notifications/styles.tsx +17 -0
  142. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +167 -0
  143. package/themes/original/src/components/OrderDetails/index.tsx +190 -35
  144. package/themes/original/src/components/OrderDetails/styles.tsx +15 -2
  145. package/themes/original/src/components/OrderItAgain/index.tsx +75 -0
  146. package/themes/original/src/components/OrderItAgain/styles.tsx +10 -0
  147. package/themes/original/src/components/OrderProgress/index.tsx +8 -2
  148. package/themes/original/src/components/OrderSummary/index.tsx +3 -36
  149. package/themes/original/src/components/OrderTypeSelector/index.tsx +85 -36
  150. package/themes/original/src/components/OrderTypeSelector/styles.tsx +19 -1
  151. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +97 -106
  152. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  153. package/themes/original/src/components/OrdersOption/index.tsx +71 -55
  154. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  155. package/themes/original/src/components/PaymentOptions/index.tsx +41 -23
  156. package/themes/original/src/components/PhoneInputNumber/index.tsx +5 -11
  157. package/themes/original/src/components/PlaceSpot/index.tsx +243 -47
  158. package/themes/original/src/components/PlaceSpot/styles.tsx +0 -2
  159. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  160. package/themes/original/src/components/ProductForm/index.tsx +633 -664
  161. package/themes/original/src/components/ProductForm/styles.tsx +9 -8
  162. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  163. package/themes/original/src/components/ProductOption/index.tsx +1 -1
  164. package/themes/original/src/components/ProfessionalFilter/index.tsx +129 -0
  165. package/themes/original/src/components/ProfessionalFilter/styles.tsx +0 -0
  166. package/themes/original/src/components/ProfessionalProfile/index.tsx +309 -0
  167. package/themes/original/src/components/ProfessionalProfile/styles.tsx +46 -0
  168. package/themes/original/src/components/ReviewDriver/index.tsx +6 -6
  169. package/themes/original/src/components/ReviewOrder/index.tsx +18 -3
  170. package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
  171. package/themes/original/src/components/ReviewTrigger/index.tsx +118 -0
  172. package/themes/original/src/components/ReviewTrigger/styles.tsx +34 -0
  173. package/themes/original/src/components/SearchBar/index.tsx +5 -3
  174. package/themes/original/src/components/ServiceForm/index.tsx +637 -0
  175. package/themes/original/src/components/ServiceForm/styles.tsx +50 -0
  176. package/themes/original/src/components/SignupForm/index.tsx +350 -206
  177. package/themes/original/src/components/SingleOrderCard/index.tsx +229 -181
  178. package/themes/original/src/components/SingleOrderCard/styles.tsx +0 -7
  179. package/themes/original/src/components/SingleProductCard/index.tsx +199 -110
  180. package/themes/original/src/components/SingleProductCard/styles.tsx +1 -10
  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/StripeElementsForm/index.tsx +15 -7
  184. package/themes/original/src/components/UpsellingProducts/index.tsx +15 -5
  185. package/themes/original/src/components/UserDetails/index.tsx +31 -17
  186. package/themes/original/src/components/UserFormDetails/index.tsx +74 -81
  187. package/themes/original/src/components/UserProfile/index.tsx +54 -29
  188. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  189. package/themes/original/src/components/UserProfileForm/index.tsx +15 -10
  190. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  191. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  192. package/themes/original/src/components/Wallets/index.tsx +176 -164
  193. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  194. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  195. package/themes/original/src/components/shared/OBottomPopup.tsx +48 -15
  196. package/themes/original/src/components/shared/OButton.tsx +10 -3
  197. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  198. package/themes/original/src/components/shared/OInput.tsx +3 -2
  199. package/themes/original/src/layouts/Container.tsx +13 -9
  200. package/themes/original/src/layouts/FloatingBottomContainer.tsx +5 -1
  201. package/themes/original/src/types/index.tsx +121 -30
  202. package/themes/original/src/utils/index.tsx +77 -0
  203. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -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,17 @@
1
+ import styled from 'styled-components/native'
2
+
3
+ export const ContainerButtons = styled.View`
4
+ margin-vertical: 50px
5
+ `
6
+
7
+ export const NotificationsGroupSwitchWrapper = styled.View`
8
+ flex-grow: 1;
9
+ justify-content: space-between;
10
+ `
11
+
12
+ export const SwitchWrapper = styled.View`
13
+ flex-direction: row;
14
+ justify-content: space-between;
15
+ align-items: center;
16
+ margin-bottom: 12px;
17
+ `
@@ -0,0 +1,167 @@
1
+ import React from 'react'
2
+ import { useTheme } from 'styled-components/native'
3
+ import { ScrollView, StyleSheet, View } from 'react-native'
4
+ import { useLanguage, useUtils } from 'ordering-components/native'
5
+ import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons'
6
+ import { OText, OButton } from '../shared'
7
+
8
+ export const OrderHistory = (props: any) => {
9
+ const {
10
+ order,
11
+ messages,
12
+ enableReview,
13
+ onClose,
14
+ handleTriggerReview
15
+ } = props
16
+
17
+ const [, t] = useLanguage()
18
+ const [{ parseDate }] = useUtils()
19
+ const theme = useTheme()
20
+
21
+ const styles = StyleSheet.create({
22
+ historyItem: {
23
+ display: 'flex',
24
+ alignItems: 'center',
25
+ flexDirection: 'row',
26
+ borderBottomWidth: 1,
27
+ borderColor: theme.colors.border
28
+ },
29
+ detailWrapper: {
30
+ marginLeft: 20,
31
+ paddingHorizontal: 13,
32
+ paddingVertical: 16
33
+ },
34
+ container: {
35
+ paddingHorizontal: 40,
36
+ paddingVertical: 15
37
+ }
38
+ });
39
+
40
+ const ORDER_STATUS: any = {
41
+ 0: 'ORDER_STATUS_PENDING',
42
+ 1: 'ORDERS_COMPLETED',
43
+ 2: 'ORDER_REJECTED',
44
+ 3: 'ORDER_STATUS_IN_BUSINESS',
45
+ 4: 'ORDER_READY',
46
+ 5: 'ORDER_REJECTED_RESTAURANT',
47
+ 6: 'ORDER_STATUS_CANCELLEDBYDRIVER',
48
+ 7: 'ORDER_STATUS_ACCEPTEDBYRESTAURANT',
49
+ 8: 'ORDER_CONFIRMED_ACCEPTED_BY_DRIVER',
50
+ 9: 'ORDER_PICKUP_COMPLETED_BY_DRIVER',
51
+ 10: 'ORDER_PICKUP_FAILED_BY_DRIVER',
52
+ 11: 'ORDER_DELIVERY_COMPLETED_BY_DRIVER',
53
+ 12: 'ORDER_DELIVERY_FAILED_BY_DRIVER',
54
+ 13: 'PREORDER',
55
+ 14: 'ORDER_NOT_READY',
56
+ 15: 'ORDER_PICKEDUP_COMPLETED_BY_CUSTOMER',
57
+ 16: 'ORDER_STATUS_CANCELLED_BY_CUSTOMER',
58
+ 17: 'ORDER_NOT_PICKEDUP_BY_CUSTOMER',
59
+ 18: 'ORDER_DRIVER_ALMOST_ARRIVED_BUSINESS',
60
+ 19: 'ORDER_DRIVER_ALMOST_ARRIVED_CUSTOMER',
61
+ 20: 'ORDER_CUSTOMER_ALMOST_ARRIVED_BUSINESS',
62
+ 21: 'ORDER_CUSTOMER_ARRIVED_BUSINESS',
63
+ 22: 'ORDER_LOOKING_FOR_DRIVER',
64
+ 23: 'ORDER_DRIVER_ON_WAY'
65
+ }
66
+
67
+ const getLogisticTagStatus = (status: any) => {
68
+ switch (status) {
69
+ case 0:
70
+ return t('PENDING', 'Pending')
71
+ case 1:
72
+ return t('IN_PROGRESS', 'In Progress')
73
+ case 2:
74
+ return t('IN_QUEUE', 'In Queue')
75
+ case 3:
76
+ return t('EXPIRED', 'Logistic expired')
77
+ case 4:
78
+ return t('RESOLVED', 'Resolved')
79
+ default:
80
+ return status
81
+ }
82
+ }
83
+
84
+ const handleReview = () => {
85
+ if (enableReview) handleTriggerReview()
86
+ else onClose()
87
+ }
88
+
89
+ return (
90
+ <ScrollView contentContainerStyle={styles.container}>
91
+ <OText size={20} style={{ alignSelf: 'center', textAlign: 'center' }} mBottom={10}>
92
+ {t('DETAILS_OF_ORDER', 'Details of Order_NUMBER_').replace('_NUMBER_', ` # ${order?.id}`)}
93
+ </OText>
94
+ {!messages?.loading && order && (
95
+ <View style={styles.historyItem}>
96
+ <MaterialCommunityIcons
97
+ name="checkbox-marked-circle"
98
+ size={20}
99
+ color={theme.colors.primary}
100
+ />
101
+ <View style={styles.detailWrapper}>
102
+ <OText
103
+ size={14}
104
+ weight='bold'
105
+ numberOfLines={1}
106
+ ellipsizeMode='tail'
107
+ >
108
+ {t('ORDER_PLACED', 'Order placed')} {' '}
109
+ {t('VIA', 'Via')}{' '}
110
+ {order.app_id ? t(order.app_id.toUpperCase(), order.app_id) : t('OTHER', 'Other')}
111
+ </OText>
112
+ <OText size={12}>{parseDate(order?.created_at, { outputFormat: 'MMM DD, hh:mm A' })}</OText>
113
+ </View>
114
+ </View>
115
+ )}
116
+ {messages && messages?.messages.map((message: any, i: number) => message.type === 1 && (
117
+ <View
118
+ style={styles.historyItem}
119
+ key={i}
120
+ >
121
+ <MaterialCommunityIcons
122
+ name="checkbox-marked-circle"
123
+ size={20}
124
+ color={theme.colors.primary}
125
+ />
126
+ <View style={styles.detailWrapper}>
127
+ {message.change?.attribute !== 'driver_id' ? (
128
+ <OText
129
+ size={14}
130
+ weight='bold'
131
+ numberOfLines={1}
132
+ ellipsizeMode='tail'
133
+ >
134
+ {message.change?.attribute === 'logistic_status'
135
+ ? getLogisticTagStatus(parseInt(message.change.new, 10))
136
+ : t(ORDER_STATUS[parseInt(message.change.new, 10)])
137
+ }
138
+ </OText>
139
+ ) : (
140
+ <OText
141
+ size={14}
142
+ weight='bold'
143
+ numberOfLines={1}
144
+ ellipsizeMode='tail'
145
+ >
146
+ {message.change.new
147
+ ? (`${message.driver?.name} ${!!message.driver?.lastname ? message.driver.lastname : ''} ${t('WAS_ASSIGNED_AS_DRIVER', 'Was assigned as driver')}`)
148
+ : t('DRIVER_UNASSIGNED', 'Driver unassigned')}
149
+ </OText>
150
+ )}
151
+ <OText size={12}>{parseDate(message?.created_at, { outputFormat: 'MMM DD, hh:mm A' })}</OText>
152
+ </View>
153
+ </View>
154
+ ))}
155
+ <OButton
156
+ text={enableReview ? t('REVIEW_ORDER', 'Review order') : t('CONTINUE', 'Continue')}
157
+ textStyle={{ fontSize: 14, color: theme.colors.white }}
158
+ imgRightSrc={theme.images.general.arrow_right}
159
+ imgRightStyle={{ tintColor: theme.colors.white, right: 5, margin: 5 }}
160
+ borderColor='transparent'
161
+ bgColor={theme.colors.primary}
162
+ style={{ borderRadius: 7.6, borderWidth: 1, height: 44, shadowOpacity: 0, marginBottom: 30, marginTop: 20 }}
163
+ onClick={() => handleReview()}
164
+ />
165
+ </ScrollView>
166
+ )
167
+ }
@@ -1,5 +1,5 @@
1
- import React, { useState, useEffect } from 'react';
2
- import { View, StyleSheet, BackHandler, Platform, Linking } from 'react-native';
1
+ import React, { useState, useEffect, useMemo } from 'react';
2
+ import { View, StyleSheet, BackHandler, Platform, Linking, RefreshControl } from 'react-native';
3
3
  import LinearGradient from 'react-native-linear-gradient';
4
4
  import { _setStoreData } from '../../providers/StoreUtil';
5
5
  import {
@@ -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';
@@ -43,6 +46,8 @@ import AntIcon from 'react-native-vector-icons/AntDesign'
43
46
  import { TaxInformation } from '../TaxInformation';
44
47
  import { Placeholder, PlaceholderLine } from 'rn-placeholder';
45
48
  import NavBar from '../NavBar'
49
+ import { OrderHistory } from './OrderHistory';
50
+ import { PlaceSpot } from '../PlaceSpot'
46
51
  export const OrderDetailsUI = (props: OrderDetailsParams) => {
47
52
  const {
48
53
  navigation,
@@ -53,7 +58,8 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
53
58
  driverLocation,
54
59
  onNavigationRedirect,
55
60
  reorderState,
56
- handleReorder
61
+ handleReorder,
62
+ getOrder
57
63
  } = props;
58
64
 
59
65
  const theme = useTheme();
@@ -64,6 +70,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
64
70
  },
65
71
  statusBar: {
66
72
  height: 12,
73
+ borderRadius: 8
67
74
  },
68
75
  logo: {
69
76
  width: 75,
@@ -85,6 +92,17 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
85
92
  width: 30,
86
93
  marginTop: Platform.OS === 'ios' ? 0 : 30
87
94
  },
95
+ linkWrapper: {
96
+ display: 'flex',
97
+ alignItems: 'center',
98
+ flexDirection: 'row'
99
+ },
100
+ professionalBlock: {
101
+ borderBottomColor: theme.colors.border,
102
+ borderBottomWidth: 1,
103
+ marginVertical: 10,
104
+ paddingVertical: 5
105
+ }
88
106
  });
89
107
 
90
108
  const [, t] = useLanguage();
@@ -93,9 +111,13 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
93
111
  const [{ carts }] = useOrder()
94
112
 
95
113
  const [isReviewed, setIsReviewed] = useState(false)
114
+ const [isOrderHistory, setIsOrderHistory] = useState(false)
96
115
  const [openTaxModal, setOpenTaxModal] = useState<any>({ open: false, tax: null, type: '' })
116
+ const [refreshing] = useState(false);
97
117
  const { order, businessData } = props.order;
98
118
  const mapValidStatuses = [9, 19, 23]
119
+ const placeSpotTypes = [3, 4, 5]
120
+ const directionTypes = [2, 3, 4, 5]
99
121
 
100
122
  const walletName: any = {
101
123
  cash: {
@@ -364,6 +386,19 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
364
386
  )
365
387
  }
366
388
 
389
+ const handleTriggerReview = () => {
390
+ setIsOrderHistory(false);
391
+ (
392
+ parseInt(order?.status) === 1 ||
393
+ parseInt(order?.status) === 11 ||
394
+ parseInt(order?.status) === 15
395
+ ) && !order.review && !isReviewed && handleClickOrderReview(order)
396
+ }
397
+
398
+
399
+ const resfreshOrder = () => {
400
+ getOrder()
401
+ }
367
402
 
368
403
  useEffect(() => {
369
404
  const _businessId = 'businessId:' + businessData?.id
@@ -375,7 +410,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
375
410
  }
376
411
  if (!reorderState?.error && reorderState.loading === false && businessData?.id) {
377
412
  const products = carts?.[_businessId]?.products
378
- const available = products.every((product: any) => product.valid === true)
413
+ const available = products?.every((product: any) => product.valid === true)
379
414
 
380
415
  if (available && reorderState?.result?.uuid && (products?.length === order?.products.length)) {
381
416
  onNavigationRedirect && onNavigationRedirect('CheckoutNavigator', { cartUuid: reorderState?.result.uuid })
@@ -422,6 +457,59 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
422
457
  lng: parseFloat(location?.location?.split(',')[1].replace(/[^-.0-9]/g, ''))
423
458
  } : location)
424
459
 
460
+ const getProductList = () => {
461
+ const professionalList = order?.products.reduce((prev: any, current: any) => {
462
+ const found = prev.find((item: any) => item.id === current?.calendar_event?.professional?.id)
463
+ if (found || !current?.calendar_event) {
464
+ return prev
465
+ }
466
+ return [...prev, current?.calendar_event?.professional]
467
+ }, [])
468
+
469
+ return (
470
+ <>
471
+ {professionalList?.length > 0 && professionalList.map((professional: any, i: number) => (
472
+ <View key={i} style={styles.professionalBlock}>
473
+ <View style={{ flexDirection: 'row', alignItems: 'center', width: '100%' }}>
474
+ {professional?.photo ? (
475
+ <ProfessionalPhoto
476
+ source={{
477
+ uri: professional?.photo
478
+ }}
479
+ imageStyle={{ borderRadius: 8 }}
480
+ />
481
+ ) : (
482
+ <OIcon
483
+ src={theme.images.general.user}
484
+ cover={false}
485
+ width={80}
486
+ height={80}
487
+ />
488
+ )}
489
+ <OText size={12} lineHeight={18} weight={'500'} numberOfLines={1}>{professional?.name} {professional?.lastname}</OText>
490
+ </View>
491
+ {order?.products.filter((product: any) => product?.calendar_event?.professional?.id === professional?.id).map((product: any, i: number) => (
492
+ <ProductItemAccordion
493
+ key={product?.id || i}
494
+ product={product}
495
+ isFromCheckout
496
+ />
497
+ ))}
498
+ </View>
499
+ ))}
500
+ {order?.products.filter((product: any) => !product?.calendar_event).map((product: any, i: number) => (
501
+ <ProductItemAccordion
502
+ key={product?.id || i}
503
+ product={product}
504
+ isFromCheckout
505
+ />
506
+ ))}
507
+ </>
508
+ )
509
+ }
510
+
511
+ const sortedProductList = useMemo(() => getProductList(), [order?.products])
512
+
425
513
  useEffect(() => {
426
514
  if (driverLocation) {
427
515
  parsedLocations[0] = {
@@ -432,7 +520,15 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
432
520
  }, [driverLocation]);
433
521
 
434
522
  return (
435
- <OrderDetailsContainer keyboardShouldPersistTaps="handled">
523
+ <OrderDetailsContainer
524
+ keyboardShouldPersistTaps="handled"
525
+ refreshControl={
526
+ <RefreshControl
527
+ refreshing={refreshing}
528
+ onRefresh={() => resfreshOrder()}
529
+ />
530
+ }
531
+ >
436
532
  {(!order || Object.keys(order).length === 0) && (
437
533
  <Placeholder style={{ marginTop: 30 }}>
438
534
  <Header>
@@ -505,28 +601,45 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
505
601
  />
506
602
  <OrderInfo>
507
603
  <OrderData>
508
- {
509
- (
510
- parseInt(order?.status) === 1 ||
511
- parseInt(order?.status) === 11 ||
512
- parseInt(order?.status) === 15
513
- ) && !order.review && !isReviewed && (
514
- <TouchableOpacity
515
- activeOpacity={0.7}
516
- style={{ marginTop: 6 }}
517
- onPress={() => handleClickOrderReview(order)}
604
+ <View style={styles.linkWrapper}>
605
+ {
606
+ (
607
+ parseInt(order?.status) === 1 ||
608
+ parseInt(order?.status) === 11 ||
609
+ parseInt(order?.status) === 15
610
+ ) && !order.review && !isReviewed && (
611
+ <TouchableOpacity
612
+ activeOpacity={0.7}
613
+ style={{ marginTop: 6, marginRight: 10 }}
614
+ onPress={() => handleClickOrderReview(order)}
615
+ >
616
+ <OText
617
+ size={10}
618
+ lineHeight={15}
619
+ color={theme.colors.primary}
620
+ style={{ textDecorationLine: 'underline' }}
621
+ >
622
+ {t('REVIEW_YOUR_ORDER', 'Review your order')}
623
+ </OText>
624
+ </TouchableOpacity>
625
+ )}
626
+ <TouchableOpacity
627
+ activeOpacity={0.7}
628
+ style={{ marginTop: 6 }}
629
+ onPress={() => setIsOrderHistory(true)}
518
630
 
631
+ >
632
+ <OText
633
+ size={10}
634
+ lineHeight={15}
635
+ color={theme.colors.primary}
636
+ style={{ textDecorationLine: 'underline', textTransform: 'capitalize' }}
519
637
  >
520
- <OText
521
- size={10}
522
- lineHeight={15}
523
- color={theme.colors.textSecondary}
524
- style={{ textDecorationLine: 'underline' }}
525
- >
526
- {t('REVIEW_YOUR_ORDER', 'Review your order')}
527
- </OText>
528
- </TouchableOpacity>
529
- )}
638
+ {t('VIEW_DETAILS', 'View Details')}
639
+ </OText>
640
+ </TouchableOpacity>
641
+ </View>
642
+
530
643
  <StaturBar>
531
644
  <LinearGradient
532
645
  start={{ x: 0.0, y: 0.0 }}
@@ -632,7 +745,39 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
632
745
  {order?.business?.address}
633
746
  </OText>
634
747
  </View>
748
+ {directionTypes.includes(order?.delivery_type) && (
749
+ <OButton
750
+ text={t('GET_DIRECTIONS', 'Get Directions')}
751
+ imgRightSrc=''
752
+ textStyle={{ color: theme.colors.white }}
753
+ style={{
754
+ alignSelf: 'center',
755
+ borderRadius: 10,
756
+ marginTop: 30
757
+ }}
758
+ onClick={() => showLocation({
759
+ latitude: order?.business?.location?.lat,
760
+ longitude: order?.business?.location?.lng,
761
+ naverCallerName: 'com.reactnativeappstemplate5',
762
+ dialogTitle: t('GET_DIRECTIONS', 'Get Directions'),
763
+ dialogMessage: t('WHAT_APP_WOULD_YOU_USE', 'What app would you like to use?'),
764
+ cancelText: t('CANCEL', 'Cancel'),
765
+ })}
766
+ />
767
+ )}
635
768
  </OrderBusiness>
769
+
770
+ {placeSpotTypes.includes(order?.delivery_type) && (
771
+ <PlaceSpotWrapper>
772
+ <PlaceSpot
773
+ isInputMode
774
+ cart={order}
775
+ spotNumberDefault={order?.spot_number}
776
+ vehicleDefault={order?.vehicle}
777
+ />
778
+ </PlaceSpotWrapper>
779
+ )}
780
+
636
781
  <View
637
782
  style={{
638
783
  height: 8,
@@ -699,7 +844,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
699
844
  <>
700
845
  {order?.driver?.location && mapValidStatuses.includes(parseInt(order?.status)) && (
701
846
  <Map>
702
- <GoogleMap
847
+ <GoogleMap
703
848
  location={typeof order?.driver?.location?.location === 'string'
704
849
  ? {
705
850
  lat: parseFloat(driverLocationString[0]),
@@ -813,14 +958,7 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
813
958
  </OrderAction>
814
959
  </HeaderInfo>
815
960
  <OrderProducts>
816
- {order?.products?.length &&
817
- order?.products.map((product: any, i: number) => (
818
- <ProductItemAccordion
819
- key={product?.id || i}
820
- product={product}
821
- isFromCheckout
822
- />
823
- ))}
961
+ {sortedProductList}
824
962
  </OrderProducts>
825
963
  <OrderBill>
826
964
  <View style={{ height: 1, backgroundColor: theme.colors.border, marginBottom: 17 }} />
@@ -1054,6 +1192,23 @@ export const OrderDetailsUI = (props: OrderDetailsParams) => {
1054
1192
  products={order?.products}
1055
1193
  />
1056
1194
  </OModal>
1195
+ <OModal
1196
+ open={isOrderHistory}
1197
+ onClose={() => setIsOrderHistory(false)}
1198
+ entireModal
1199
+ >
1200
+ <OrderHistory
1201
+ order={order}
1202
+ messages={messages}
1203
+ enableReview={(
1204
+ parseInt(order?.status) === 1 ||
1205
+ parseInt(order?.status) === 11 ||
1206
+ parseInt(order?.status) === 15
1207
+ ) && !order.review && !isReviewed}
1208
+ onClose={() => setIsOrderHistory(false)}
1209
+ handleTriggerReview={handleTriggerReview}
1210
+ />
1211
+ </OModal>
1057
1212
  </OrderDetailsContainer>
1058
1213
  );
1059
1214
  };