ordering-ui-react-native 0.18.55 → 0.18.56-crash-driver-1

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 (266) hide show
  1. package/package.json +6 -4
  2. package/src/components/BusinessInformation/index.tsx +10 -9
  3. package/src/components/PaymentOptionsWebView/index.tsx +30 -8
  4. package/src/components/PhoneInputNumber/index.tsx +6 -2
  5. package/src/components/StripeMethodForm/index.tsx +60 -55
  6. package/src/components/shared/OToast.tsx +3 -2
  7. package/src/types/index.tsx +3 -1
  8. package/src/utils/index.tsx +2 -2
  9. package/themes/business/index.tsx +6 -0
  10. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +15 -8
  11. package/themes/business/src/components/BusinessController/index.tsx +19 -17
  12. package/themes/business/src/components/BusinessProductList/AccordionDropdown.tsx +63 -0
  13. package/themes/business/src/components/BusinessProductList/IterateCategories.tsx +108 -0
  14. package/themes/business/src/components/BusinessProductList/ProductList.tsx +196 -0
  15. package/themes/business/src/components/BusinessProductList/index.tsx +196 -0
  16. package/themes/business/src/components/BusinessProductList/styles.tsx +10 -0
  17. package/themes/business/src/components/Chat/index.tsx +48 -19
  18. package/themes/business/src/components/DriverMap/index.tsx +36 -23
  19. package/themes/business/src/components/DriverSchedule/index.tsx +45 -8
  20. package/themes/business/src/components/FloatingButton/index.tsx +34 -31
  21. package/themes/business/src/components/GoogleMap/index.tsx +15 -8
  22. package/themes/business/src/components/Home/index.tsx +5 -1
  23. package/themes/business/src/components/LanguageSelector/index.tsx +1 -2
  24. package/themes/business/src/components/LanguageSelector/lang_country.json +515 -70
  25. package/themes/business/src/components/LoginForm/index.tsx +2 -2
  26. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  27. package/themes/business/src/components/MapView/index.tsx +28 -17
  28. package/themes/business/src/components/MessagesOption/index.tsx +22 -94
  29. package/themes/business/src/components/NewOrderNotification/index.tsx +162 -106
  30. package/themes/business/src/components/NotFoundSource/index.tsx +2 -2
  31. package/themes/business/src/components/OrderDetails/Business.tsx +53 -3
  32. package/themes/business/src/components/OrderDetails/Delivery.tsx +209 -13
  33. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +107 -75
  34. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +79 -41
  35. package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +220 -0
  36. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +7 -2
  37. package/themes/business/src/components/OrderMessage/index.tsx +1 -1
  38. package/themes/business/src/components/OrderSummary/index.tsx +245 -82
  39. package/themes/business/src/components/OrdersListManager/index.tsx +7 -2
  40. package/themes/business/src/components/OrdersListManager/utils.tsx +1 -1
  41. package/themes/business/src/components/OrdersOption/index.tsx +125 -48
  42. package/themes/business/src/components/PhoneInputNumber/index.tsx +8 -5
  43. package/themes/business/src/components/PreviousMessages/FooterMessageComponent.tsx +103 -0
  44. package/themes/business/src/components/PreviousMessages/index.tsx +97 -55
  45. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +43 -41
  46. package/themes/business/src/components/PreviousOrders/OrderList.tsx +93 -0
  47. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +1 -1
  48. package/themes/business/src/components/PreviousOrders/index.tsx +195 -221
  49. package/themes/business/src/components/PreviousOrders/styles.tsx +10 -0
  50. package/themes/business/src/components/PrinterEdition/index.tsx +363 -0
  51. package/themes/business/src/components/PrinterEdition/styles.tsx +61 -0
  52. package/themes/business/src/components/PrinterSettings/index.tsx +267 -0
  53. package/themes/business/src/components/PrinterSettings/styles.tsx +30 -0
  54. package/themes/business/src/components/ProductItemAccordion/index.tsx +2 -2
  55. package/themes/business/src/components/ReviewCustomer/index.tsx +1 -1
  56. package/themes/business/src/components/SearchBar/index.tsx +2 -1
  57. package/themes/business/src/components/Sessions/index.tsx +187 -0
  58. package/themes/business/src/components/Sessions/styles.tsx +20 -0
  59. package/themes/business/src/components/StoresList/index.tsx +4 -3
  60. package/themes/business/src/components/UserFormDetails/index.tsx +111 -107
  61. package/themes/business/src/components/UserProfileForm/index.tsx +103 -53
  62. package/themes/business/src/components/WebsocketStatus/index.tsx +171 -0
  63. package/themes/business/src/components/WebsocketStatus/styles.tsx +28 -0
  64. package/themes/business/src/components/shared/OInput.tsx +2 -0
  65. package/themes/business/src/hooks/useLocation.tsx +5 -4
  66. package/themes/business/src/types/index.tsx +21 -1
  67. package/themes/business/src/utils/index.tsx +5 -0
  68. package/themes/kiosk/src/components/Checkout/index.tsx +5 -3
  69. package/themes/kiosk/src/components/CustomerName/index.tsx +1 -1
  70. package/themes/kiosk/src/components/Intro/index.tsx +16 -1
  71. package/themes/kiosk/src/components/LoginForm/index.tsx +131 -101
  72. package/themes/kiosk/src/components/PaymentOptions/index.tsx +57 -121
  73. package/themes/original/index.tsx +11 -3
  74. package/themes/original/src/components/AddressDetails/index.tsx +20 -10
  75. package/themes/original/src/components/AddressForm/index.tsx +41 -20
  76. package/themes/original/src/components/AddressForm/styles.tsx +1 -1
  77. package/themes/original/src/components/AddressList/index.tsx +22 -11
  78. package/themes/original/src/components/AddressList/styles.tsx +4 -4
  79. package/themes/original/src/components/AnalyticsSegment/index.tsx +10 -7
  80. package/themes/original/src/components/AppleLogin/styles.tsx +3 -1
  81. package/themes/original/src/components/BusinessBasicInformation/index.tsx +8 -11
  82. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +1 -1
  83. package/themes/original/src/components/BusinessController/index.tsx +40 -43
  84. package/themes/original/src/components/BusinessController/styles.tsx +12 -12
  85. package/themes/original/src/components/BusinessInformation/index.tsx +45 -17
  86. package/themes/original/src/components/BusinessInformation/styles.tsx +2 -2
  87. package/themes/original/src/components/BusinessItemAccordion/index.tsx +11 -7
  88. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +317 -0
  89. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +96 -0
  90. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +1 -1
  91. package/themes/original/src/components/BusinessListingSearch/index.tsx +57 -361
  92. package/themes/original/src/components/BusinessListingSearch/styles.tsx +1 -1
  93. package/themes/original/src/components/BusinessPreorder/index.tsx +9 -7
  94. package/themes/original/src/components/BusinessProductsCategories/index.tsx +2 -3
  95. package/themes/original/src/components/BusinessProductsList/index.tsx +5 -4
  96. package/themes/original/src/components/BusinessProductsListing/index.tsx +67 -28
  97. package/themes/original/src/components/BusinessProductsListing/styles.tsx +3 -4
  98. package/themes/original/src/components/BusinessReviews/index.tsx +1 -1
  99. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  100. package/themes/original/src/components/BusinessesListing/Layout/Appointment/styles.tsx +5 -5
  101. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListFooter.tsx +69 -0
  102. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListHeader.tsx +406 -0
  103. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListing.tsx +76 -0
  104. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +30 -404
  105. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +2 -2
  106. package/themes/original/src/components/Cart/index.tsx +51 -40
  107. package/themes/original/src/components/CartContent/index.tsx +98 -54
  108. package/themes/original/src/components/CartStoresListing/styles.tsx +2 -2
  109. package/themes/original/src/components/Checkout/index.tsx +308 -75
  110. package/themes/original/src/components/Checkout/styles.tsx +17 -0
  111. package/themes/original/src/components/CitiesControl/styles.tsx +1 -1
  112. package/themes/original/src/components/DatePicker/index.tsx +33 -0
  113. package/themes/original/src/components/DatePicker/styles.tsx +20 -0
  114. package/themes/original/src/components/DriverTips/index.tsx +6 -3
  115. package/themes/original/src/components/FacebookLogin/styles.tsx +3 -1
  116. package/themes/original/src/components/Favorite/index.tsx +8 -4
  117. package/themes/original/src/components/Favorite/styles.tsx +0 -2
  118. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  119. package/themes/original/src/components/ForgotPasswordForm/index.tsx +5 -0
  120. package/themes/original/src/components/GPSButton/index.tsx +7 -5
  121. package/themes/original/src/components/GiftCard/GiftCardOrdersList/index.tsx +64 -0
  122. package/themes/original/src/components/GiftCard/GiftCardOrdersList/styles.tsx +8 -0
  123. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +8 -3
  124. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +36 -3
  125. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +1 -1
  126. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +84 -8
  127. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +1 -1
  128. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +2 -2
  129. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +1 -1
  130. package/themes/original/src/components/GiftCard/SingleGiftCard/index.tsx +101 -0
  131. package/themes/original/src/components/GiftCard/SingleGiftCard/styles.tsx +4 -0
  132. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +83 -0
  133. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/styles.tsx +9 -0
  134. package/themes/original/src/components/GoogleLogin/styles.tsx +1 -1
  135. package/themes/original/src/components/GoogleMap/index.tsx +52 -5
  136. package/themes/original/src/components/Help/index.tsx +7 -0
  137. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +5 -0
  138. package/themes/original/src/components/HelpGuide/index.tsx +5 -0
  139. package/themes/original/src/components/HelpOrder/index.tsx +5 -0
  140. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
  141. package/themes/original/src/components/HighestRatedBusinesses/styles.tsx +1 -1
  142. package/themes/original/src/components/Home/index.tsx +3 -2
  143. package/themes/original/src/components/LastOrder/index.tsx +2 -1
  144. package/themes/original/src/components/LastOrders/index.tsx +2 -1
  145. package/themes/original/src/components/LoginForm/Otp/index.tsx +79 -25
  146. package/themes/original/src/components/LoginForm/index.tsx +38 -14
  147. package/themes/original/src/components/MessageListing/index.tsx +6 -0
  148. package/themes/original/src/components/Messages/index.tsx +9 -3
  149. package/themes/original/src/components/Messages/styles.tsx +1 -1
  150. package/themes/original/src/components/MomentOption/index.tsx +20 -5
  151. package/themes/original/src/components/MomentSelector/index.tsx +1 -1
  152. package/themes/original/src/components/MultiCart/index.tsx +1 -1
  153. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +48 -15
  154. package/themes/original/src/components/MultiCheckout/index.tsx +295 -56
  155. package/themes/original/src/components/MultiCheckout/styles.tsx +20 -1
  156. package/themes/original/src/components/MultiOrdersDetails/index.tsx +21 -16
  157. package/themes/original/src/components/MyOrders/index.tsx +37 -39
  158. package/themes/original/src/components/NavBar/index.tsx +15 -14
  159. package/themes/original/src/components/NetworkError/index.tsx +2 -3
  160. package/themes/original/src/components/NetworkError/styles.tsx +2 -2
  161. package/themes/original/src/components/Notifications/index.tsx +9 -8
  162. package/themes/original/src/components/Notifications/styles.tsx +0 -1
  163. package/themes/original/src/components/OrderDetails/OrderEta.tsx +21 -6
  164. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +14 -5
  165. package/themes/original/src/components/OrderDetails/index.tsx +718 -667
  166. package/themes/original/src/components/OrderDetails/styles.tsx +24 -7
  167. package/themes/original/src/components/OrderProgress/index.tsx +50 -14
  168. package/themes/original/src/components/OrderProgress/styles.tsx +1 -1
  169. package/themes/original/src/components/OrderSummary/index.tsx +26 -34
  170. package/themes/original/src/components/OrderTypeSelector/index.tsx +5 -0
  171. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/styles.tsx +1 -1
  172. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/styles.tsx +1 -1
  173. package/themes/original/src/components/OrdersOption/index.tsx +14 -6
  174. package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
  175. package/themes/original/src/components/PageBanner/index.tsx +3 -0
  176. package/themes/original/src/components/PaymentOptionCard/index.tsx +182 -0
  177. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +3 -0
  178. package/themes/original/src/components/PaymentOptions/index.tsx +118 -37
  179. package/themes/original/src/components/PhoneInputNumber/index.tsx +15 -1
  180. package/themes/original/src/components/PreviousOrders/index.tsx +2 -0
  181. package/themes/original/src/components/ProductForm/ActionButton.tsx +122 -0
  182. package/themes/original/src/components/ProductForm/ExtraOptions.tsx +56 -0
  183. package/themes/original/src/components/ProductForm/index.tsx +193 -267
  184. package/themes/original/src/components/ProductForm/styles.tsx +1 -1
  185. package/themes/original/src/components/ProductItemAccordion/index.tsx +55 -42
  186. package/themes/original/src/components/ProductItemAccordion/styles.tsx +3 -4
  187. package/themes/original/src/components/ProductOptionSubOption/index.tsx +120 -79
  188. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +10 -9
  189. package/themes/original/src/components/ProfessionalProfile/styles.tsx +3 -3
  190. package/themes/original/src/components/Promotions/index.tsx +13 -11
  191. package/themes/original/src/components/Promotions/styles.tsx +0 -2
  192. package/themes/original/src/components/ReviewDriver/index.tsx +5 -0
  193. package/themes/original/src/components/ReviewDriver/styles.tsx +1 -1
  194. package/themes/original/src/components/ReviewOrder/index.tsx +5 -0
  195. package/themes/original/src/components/ReviewOrder/styles.tsx +1 -1
  196. package/themes/original/src/components/ReviewProducts/index.tsx +5 -0
  197. package/themes/original/src/components/ReviewProducts/styles.tsx +1 -1
  198. package/themes/original/src/components/ScheduleAccordion/index.tsx +3 -3
  199. package/themes/original/src/components/ServiceForm/index.tsx +2 -2
  200. package/themes/original/src/components/ServiceForm/styles.tsx +4 -4
  201. package/themes/original/src/components/Sessions/index.tsx +5 -0
  202. package/themes/original/src/components/SignupForm/index.tsx +76 -60
  203. package/themes/original/src/components/SingleOrderCard/index.tsx +6 -5
  204. package/themes/original/src/components/SingleProductCard/index.tsx +5 -4
  205. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -5
  206. package/themes/original/src/components/StripeCardsList/index.tsx +26 -8
  207. package/themes/original/src/components/StripeElementsForm/index.tsx +80 -62
  208. package/themes/original/src/components/StripeElementsForm/naked.tsx +59 -1
  209. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +170 -0
  210. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +91 -0
  211. package/themes/original/src/components/UpsellingProducts/index.tsx +15 -199
  212. package/themes/original/src/components/UpsellingProducts/styles.tsx +19 -0
  213. package/themes/original/src/components/UserFormDetails/index.tsx +128 -79
  214. package/themes/original/src/components/UserFormDetails/styles.tsx +8 -1
  215. package/themes/original/src/components/UserProfile/index.tsx +5 -4
  216. package/themes/original/src/components/UserProfileForm/index.tsx +35 -36
  217. package/themes/original/src/components/UserVerification/index.tsx +55 -50
  218. package/themes/original/src/components/WalletTransactionItem/index.tsx +2 -2
  219. package/themes/original/src/components/WalletTransactions/styles.tsx +1 -0
  220. package/themes/original/src/components/Wallets/index.tsx +35 -49
  221. package/themes/original/src/components/Wallets/styles.tsx +3 -4
  222. package/themes/original/src/components/WebsocketStatus/index.tsx +172 -0
  223. package/themes/original/src/components/WebsocketStatus/styles.tsx +28 -0
  224. package/themes/original/src/components/shared/HeaderTitle.tsx +1 -1
  225. package/themes/original/src/components/shared/OButton.tsx +5 -5
  226. package/themes/original/src/components/shared/OInput.tsx +7 -4
  227. package/themes/original/src/components/shared/OModal.tsx +12 -14
  228. package/themes/original/src/layouts/Container.tsx +5 -3
  229. package/themes/original/src/types/index.tsx +13 -2
  230. package/themes/original/src/utils/index.tsx +124 -22
  231. package/src/navigators/BottomNavigator.tsx +0 -117
  232. package/src/navigators/CheckoutNavigator.tsx +0 -66
  233. package/src/navigators/HomeNavigator.tsx +0 -202
  234. package/src/navigators/NavigationRef.tsx +0 -7
  235. package/src/navigators/RootNavigator.tsx +0 -269
  236. package/src/pages/Account.tsx +0 -34
  237. package/src/pages/AddressForm.tsx +0 -62
  238. package/src/pages/AddressList.tsx +0 -24
  239. package/src/pages/BusinessProductsList.tsx +0 -81
  240. package/src/pages/BusinessesListing.tsx +0 -43
  241. package/src/pages/CartList.tsx +0 -49
  242. package/src/pages/Checkout.tsx +0 -101
  243. package/src/pages/ForgotPassword.tsx +0 -24
  244. package/src/pages/Help.tsx +0 -23
  245. package/src/pages/HelpAccountAndPayment.tsx +0 -23
  246. package/src/pages/HelpGuide.tsx +0 -23
  247. package/src/pages/HelpOrder.tsx +0 -23
  248. package/src/pages/Home.tsx +0 -36
  249. package/src/pages/IntroductoryTutorial.tsx +0 -170
  250. package/src/pages/Login.tsx +0 -47
  251. package/src/pages/MomentOption.tsx +0 -30
  252. package/src/pages/MultiCheckout.tsx +0 -31
  253. package/src/pages/MultiOrdersDetails.tsx +0 -27
  254. package/src/pages/MyOrders.tsx +0 -40
  255. package/src/pages/NetworkError.tsx +0 -24
  256. package/src/pages/NotFound.tsx +0 -22
  257. package/src/pages/OrderDetails.tsx +0 -25
  258. package/src/pages/ProductDetails.tsx +0 -55
  259. package/src/pages/Profile.tsx +0 -36
  260. package/src/pages/ReviewDriver.tsx +0 -30
  261. package/src/pages/ReviewOrder.tsx +0 -32
  262. package/src/pages/ReviewProducts.tsx +0 -30
  263. package/src/pages/Sessions.tsx +0 -22
  264. package/src/pages/Signup.tsx +0 -53
  265. package/src/pages/SpinnerLoader.tsx +0 -10
  266. package/src/pages/Splash.tsx +0 -21
@@ -4,12 +4,16 @@ import { useApi, useSession } from 'ordering-components/native';
4
4
  export const StripeElementsForm = (props: any) => {
5
5
  const {
6
6
  UIComponent,
7
- toSave
7
+ toSave,
8
+ setCardsList,
9
+ cardsList,
10
+ handleCardClick
8
11
  } = props;
9
12
 
10
13
  const [ordering] = useApi();
11
14
  const [{ token }] = useSession();
12
15
  const [state, setState] = useState({ loading: false, loadingAdd: false, error: null, requirements: null });
16
+ const [publicKeyState, setPublicKeyState] = useState({ key: props.publicKey, loading: true, error: null })
13
17
 
14
18
  const getRequirements = async () => {
15
19
  try {
@@ -61,6 +65,14 @@ export const StripeElementsForm = (props: any) => {
61
65
  })
62
66
  const response = await result.json();
63
67
  isNewCard && props.onSelectCard && props.onSelectCard(response.result);
68
+ setCardsList && setCardsList({
69
+ ...cardsList,
70
+ cards: [
71
+ ...cardsList.cards,
72
+ response.result
73
+ ]
74
+ })
75
+ handleCardClick(response.result)
64
76
  setState({
65
77
  ...state,
66
78
  loadingAdd: false
@@ -74,6 +86,51 @@ export const StripeElementsForm = (props: any) => {
74
86
  }
75
87
  }
76
88
 
89
+ /**
90
+ * Method to get stripe credentials from API
91
+ */
92
+ const getCredentials = async () => {
93
+ try {
94
+ setPublicKeyState({
95
+ ...publicKeyState,
96
+ loading: true
97
+ })
98
+ const { content: { result, error } } = await ordering.setAccessToken(token).paymentCards().getCredentials()
99
+ if (!error) {
100
+ setPublicKeyState({
101
+ loading: false,
102
+ key: result.publishable,
103
+ error: null
104
+ })
105
+ } else {
106
+ setPublicKeyState({
107
+ ...publicKeyState,
108
+ loading: false,
109
+ error: result
110
+ })
111
+ }
112
+ } catch (error) {
113
+ setPublicKeyState({
114
+ ...publicKeyState,
115
+ loading: false,
116
+ error: error.message
117
+ })
118
+ }
119
+ }
120
+
121
+ useEffect(() => {
122
+ if (!token) return
123
+ if (props.publicKey) {
124
+ setPublicKeyState({
125
+ loading: false,
126
+ key: props.publicKey,
127
+ error: null
128
+ })
129
+ } else {
130
+ getCredentials()
131
+ }
132
+ }, [token, props.publicKey])
133
+
77
134
  useEffect(() => {
78
135
  if (!token || state.requirements) return
79
136
  toSave && getRequirements()
@@ -85,6 +142,7 @@ export const StripeElementsForm = (props: any) => {
85
142
  values={state}
86
143
  requirements={state.requirements}
87
144
  stripeTokenHandler={stripeTokenHandler}
145
+ publicKeyState={publicKeyState}
88
146
  />
89
147
  )
90
148
  }
@@ -0,0 +1,170 @@
1
+ import React, { useState } from 'react'
2
+ import { Platform, StyleSheet, View } from 'react-native'
3
+ import {
4
+ useLanguage,
5
+ useOrder,
6
+ useConfig
7
+ } from 'ordering-components/native'
8
+ import { useTheme } from 'styled-components/native';
9
+ import { OText, OButton } from '../shared'
10
+ import {
11
+ CartList,
12
+ CartDivider,
13
+ TopActionsHeader,
14
+ TopHeader
15
+ } from './styles'
16
+ import { OrderSummary } from '../OrderSummary';
17
+ import { Cart } from '../Cart';
18
+ import { ScrollView } from 'react-native-gesture-handler';
19
+ import IconAntDesign from 'react-native-vector-icons/AntDesign';
20
+ import { useSafeAreaInsets } from 'react-native-safe-area-context';
21
+ import { UpsellingLayout } from './UpsellingLayout';
22
+
23
+ export const UpsellingContent = (props: any) => {
24
+ const {
25
+ onGoBack,
26
+ handleUpsellingPage,
27
+ onNavigationRedirect,
28
+ cart,
29
+ productsList
30
+ } = props
31
+
32
+ const theme = useTheme();
33
+
34
+ const [{ carts }] = useOrder()
35
+ const [{ configs }] = useConfig()
36
+ const [, t] = useLanguage()
37
+ const { bottom } = useSafeAreaInsets()
38
+ const [isCartsLoading, setIsCartsLoading] = useState(false)
39
+ const [showTitle, setShowTitle] = useState(false)
40
+
41
+ const isMultiCheckout = configs?.checkout_multi_business_enabled?.value === '1'
42
+ const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
43
+ const showCartList = isChewLayout
44
+ const commentDelayTime = isChewLayout ? 500 : null
45
+
46
+ const cartList = (carts && Object.values(carts).filter((_cart: any) => _cart?.products?.length > 0 && _cart.uuid !== cart?.uuid)) || []
47
+
48
+ const styles = StyleSheet.create({
49
+ closeUpsellingButton: {
50
+ borderRadius: 7.6,
51
+ borderWidth: 1,
52
+ alignSelf: 'center',
53
+ height: 44,
54
+ shadowOpacity: 0,
55
+ width: '80%',
56
+ },
57
+ cancelBtn: {
58
+ paddingHorizontal: 18,
59
+ borderWidth: 1,
60
+ borderRadius: 7.6,
61
+ borderColor: theme.colors.textSecondary,
62
+ height: 38
63
+ },
64
+ headerItem: {
65
+ flexDirection: 'row',
66
+ alignItems: 'center',
67
+ marginVertical: 2,
68
+ marginHorizontal: 20,
69
+ },
70
+ btnBackArrow: {
71
+ borderWidth: 0,
72
+ width: 26,
73
+ height: 26,
74
+ backgroundColor: theme.colors.clear,
75
+ borderColor: theme.colors.clear,
76
+ shadowColor: theme.colors.clear,
77
+ paddingLeft: 0,
78
+ paddingRight: 0,
79
+ marginLeft: 20,
80
+ marginBottom: 10
81
+ },
82
+ wrapperNavbar: {
83
+ paddingHorizontal: 20,
84
+ paddingTop: 0,
85
+ }
86
+ })
87
+
88
+
89
+ const handleScroll = ({ nativeEvent: { contentOffset } }: any) => {
90
+ setShowTitle(contentOffset.y > 30)
91
+ }
92
+
93
+ return (
94
+ <>
95
+ <View style={styles.wrapperNavbar}>
96
+ <TopHeader>
97
+ <>
98
+ <TopActionsHeader onPress={() => onGoBack()}>
99
+ <IconAntDesign
100
+ name='arrowleft'
101
+ size={26}
102
+ />
103
+ </TopActionsHeader>
104
+ {showTitle && (
105
+ <OText
106
+ size={16}
107
+ style={{ flex: 1, textAlign: 'center', right: 15 }}
108
+ weight={Platform.OS === 'ios' ? '600' : 'bold'}
109
+ numberOfLines={2}
110
+ ellipsizeMode='tail'
111
+ >
112
+ {t('WANT_SOMETHING_ELSE', 'Do you want something else?')}
113
+ </OText>
114
+ )}
115
+ </>
116
+ </TopHeader>
117
+ </View>
118
+ <ScrollView style={{ marginTop: 10, marginBottom: props.isPage ? 40 : bottom + (Platform.OS == 'ios' ? 96 : 130) }} showsVerticalScrollIndicator={false} onScroll={handleScroll}>
119
+ {productsList.length > 0 &&
120
+ <View style={{ paddingHorizontal: 40, overflow: 'visible' }}>
121
+ <OText size={16} lineHeight={24} weight={'500'}>{t('WANT_SOMETHING_ELSE', 'Do you want something else?')}</OText>
122
+ <UpsellingLayout {...props} />
123
+ </View>
124
+ }
125
+ <View style={{ paddingHorizontal: 40 }}>
126
+ <OText size={20} lineHeight={30} weight={600} style={{ marginTop: 10, marginBottom: 17 }}>{t('YOUR_CART', 'Your cart')}</OText>
127
+ <OrderSummary
128
+ cart={cart}
129
+ commentDelayTime={commentDelayTime}
130
+ isCartPending={cart?.status === 2}
131
+ onNavigationRedirect={onNavigationRedirect}
132
+ />
133
+ </View>
134
+ {showCartList && cartList.map((cart: any, i: number) => (
135
+ <CartList key={i}>
136
+ <Cart
137
+ isFromUpselling
138
+ cart={cart}
139
+ cartuuid={cart.uuid}
140
+ hideUpselling
141
+ singleBusiness={props.singleBusiness}
142
+ isFranchiseApp={props.isFranchiseApp}
143
+ isCartsLoading={isCartsLoading}
144
+ setIsCartsLoading={setIsCartsLoading}
145
+ isMultiCheckout={isMultiCheckout}
146
+ onNavigationRedirect={props.onNavigationRedirect}
147
+ />
148
+ <CartDivider />
149
+ </CartList>
150
+ ))}
151
+ </ScrollView>
152
+ <View
153
+ style={{
154
+ alignItems: 'center',
155
+ bottom: props.isPage ? Platform.OS === 'ios' ? 0 : 20 : Platform.OS === 'ios' ? bottom + 59 : bottom + 125
156
+ }}
157
+ >
158
+ <OButton
159
+ imgRightSrc=''
160
+ text={t('CHECKOUT', 'Checkout')}
161
+ textStyle={{ color: theme.colors.white, fontSize: 14 }}
162
+ bgColor={theme.colors.primary}
163
+ borderColor={theme.colors.primary}
164
+ style={{ ...styles.closeUpsellingButton }}
165
+ onClick={() => handleUpsellingPage(cart)}
166
+ />
167
+ </View>
168
+ </>
169
+ )
170
+ }
@@ -0,0 +1,91 @@
1
+ import React from 'react'
2
+ import { Platform, StyleSheet, View } from 'react-native'
3
+ import {
4
+ useUtils,
5
+ useLanguage
6
+ } from 'ordering-components/native'
7
+ import {
8
+ Container,
9
+ UpsellingContainer,
10
+ Item,
11
+ Details,
12
+ AddButton,
13
+ } from './styles'
14
+ import { OIcon, OText } from '../shared'
15
+ import { useTheme } from 'styled-components/native';
16
+
17
+ export const UpsellingLayout = (props : any) => {
18
+ const {
19
+ upsellingProducts,
20
+ productsList,
21
+ onNavigationRedirect,
22
+ business
23
+ } = props
24
+ const theme = useTheme()
25
+ const [{ parsePrice }] = useUtils()
26
+ const [, t] = useLanguage()
27
+
28
+ const hideProductDummyLogo = theme?.business_view?.components?.products?.components?.product?.components?.dummy?.hidden
29
+
30
+
31
+ const styles = StyleSheet.create({
32
+ imageStyle: {
33
+ width: 73,
34
+ height: 73,
35
+ resizeMode: 'cover',
36
+ borderRadius: 7.6,
37
+ },
38
+ })
39
+
40
+ const handleFormProduct = (product: any) => {
41
+ onNavigationRedirect && onNavigationRedirect('ProductDetails', {
42
+ product: product,
43
+ businessId: product?.api?.businessId,
44
+ businessSlug: business.slug,
45
+ })
46
+ }
47
+
48
+
49
+ return (
50
+ <>
51
+ <Container>
52
+ <UpsellingContainer
53
+ horizontal
54
+ showsHorizontalScrollIndicator={false}
55
+ contentContainerStyle={{ paddingHorizontal: Platform.OS === 'ios' ? 40 : 0 }}
56
+ >
57
+ {
58
+ !upsellingProducts.loading && (
59
+ <>
60
+ {
61
+ !upsellingProducts.error ? productsList.map((product: any, i: number) => (
62
+ <Item key={`${product.id}_${i}`}>
63
+ <View style={{ flexBasis: '57%' }}>
64
+ <Details>
65
+ <OText size={12} lineHeight={18} numberOfLines={1} ellipsizeMode='tail'>{product.name}</OText>
66
+ <OText size={12} lineHeight={18} color={theme.colors.textNormal}>{parsePrice(product.price)}</OText>
67
+ </Details>
68
+ <AddButton onPress={() => handleFormProduct(product)}>
69
+ <OText size={10} color={theme.colors.primary}>{t('ADD', 'Add')}</OText>
70
+ </AddButton>
71
+ </View>
72
+ {(product?.images || !hideProductDummyLogo) && (
73
+ <View>
74
+ <OIcon url={product?.images || theme?.images?.dummies?.product} style={styles.imageStyle} />
75
+ </View>
76
+ )}
77
+ </Item>
78
+ )) : (
79
+ <OText>
80
+ {upsellingProducts.message}
81
+ </OText>
82
+ )
83
+ }
84
+ </>
85
+ )
86
+ }
87
+ </UpsellingContainer>
88
+ </Container>
89
+ </>
90
+ )
91
+ }
@@ -1,116 +1,41 @@
1
- import React, { useState, useEffect } from 'react'
2
- import { Platform, StyleSheet, TouchableOpacity, View } from 'react-native'
1
+ import React, { useEffect } from 'react'
3
2
  import {
4
3
  UpsellingPage as UpsellingPageController,
5
- useUtils,
6
- useLanguage,
7
4
  useOrder,
8
- useConfig
9
5
  } from 'ordering-components/native'
10
- import { useTheme } from 'styled-components/native';
11
- import { OText, OIcon, OBottomPopup, OButton } from '../shared'
6
+ import { OBottomPopup } from '../shared'
12
7
  import { UpsellingProductsParams } from '../../types'
13
- import {
14
- Container,
15
- UpsellingContainer,
16
- Item,
17
- Details,
18
- AddButton,
19
- CartList,
20
- CartDivider
21
- } from './styles'
22
- import { OrderSummary } from '../OrderSummary';
23
- import { Cart } from '../Cart';
24
- import { ScrollView } from 'react-native-gesture-handler';
25
- import { useSafeAreaInsets } from 'react-native-safe-area-context';
8
+
9
+ import { UpsellingLayout } from './UpsellingLayout';
10
+ import { UpsellingContent } from './UpsellingContent';
26
11
 
27
12
  const UpsellingProductsUI = (props: UpsellingProductsParams) => {
28
13
  const {
29
14
  isCustomMode,
30
15
  upsellingProducts,
31
- business,
32
16
  handleUpsellingPage,
33
17
  openUpselling,
34
18
  canOpenUpselling,
35
19
  setCanOpenUpselling,
36
- isFromCart,
37
- onNavigationRedirect,
38
- onGoBack
20
+ isFromCart
39
21
  } = props
40
22
 
41
- const theme = useTheme();
42
-
43
- const styles = StyleSheet.create({
44
- imageStyle: {
45
- width: 73,
46
- height: 73,
47
- resizeMode: 'cover',
48
- borderRadius: 7.6,
49
- },
50
- closeUpsellingButton: {
51
- borderRadius: 7.6,
52
- borderColor: theme.colors.primary,
53
- backgroundColor: theme.colors.primary,
54
- borderWidth: 1,
55
- alignSelf: 'center',
56
- height: 44,
57
- shadowOpacity: 0,
58
- width: '80%',
59
- },
60
- cancelBtn: {
61
- paddingHorizontal: 18,
62
- borderWidth: 1,
63
- borderRadius: 7.6,
64
- borderColor: theme.colors.textSecondary,
65
- height: 38
66
- },
67
- headerItem: {
68
- flexDirection: 'row',
69
- alignItems: 'center',
70
- marginVertical: 2,
71
- marginHorizontal: 20,
72
- },
73
- btnBackArrow: {
74
- borderWidth: 0,
75
- width: 26,
76
- height: 26,
77
- backgroundColor: theme.colors.clear,
78
- borderColor: theme.colors.clear,
79
- shadowColor: theme.colors.clear,
80
- paddingLeft: 0,
81
- paddingRight: 0,
82
- marginLeft: 20,
83
- marginBottom: 10
84
- },
85
- })
86
-
87
23
  const [{ carts }] = useOrder()
88
- const [{ parsePrice }] = useUtils()
89
- const [{ configs }] = useConfig()
90
- const [, t] = useLanguage()
91
- const { bottom } = useSafeAreaInsets()
92
- const [isCartsLoading, setIsCartsLoading] = useState(false)
93
-
94
- const isMultiCheckout = configs?.checkout_multi_business_enabled?.value === '1'
95
- const isChewLayout = theme?.header?.components?.layout?.type?.toLowerCase() === 'chew'
96
- const showCartList = isChewLayout
97
- const commentDelayTime = isChewLayout ? 500 : null
98
24
 
99
25
  const cart = carts?.[`businessId:${props.businessId}`] ?? {}
100
- const cartList = (carts && Object.values(carts).filter((_cart: any) => _cart?.products?.length > 0 && _cart.uuid !== cart?.uuid)) || []
101
26
  const cartProducts = cart?.products?.length
102
- ? cart?.products.map((product: any) => product.id)
103
- : []
27
+ ? cart?.products.map((product: any) => product.id)
28
+ : []
104
29
 
105
30
  const productsList = !upsellingProducts.loading && !upsellingProducts.error
106
- ? upsellingProducts?.products?.length
31
+ ? upsellingProducts?.products?.length
107
32
  ? upsellingProducts?.products.filter((product: any) => !cartProducts.includes(product.id))
108
33
  : (props?.products ?? []).filter((product: any) => !cartProducts.includes(product.id)) ?? []
109
- : []
34
+ : []
110
35
 
111
36
  useEffect(() => {
112
37
  if (!isCustomMode && !props.products) {
113
- if (!upsellingProducts.loading) {
38
+ if (!upsellingProducts?.loading) {
114
39
  if (upsellingProducts?.products?.length && !isFromCart) {
115
40
  setCanOpenUpselling && setCanOpenUpselling(true)
116
41
  } else {
@@ -118,125 +43,16 @@ const UpsellingProductsUI = (props: UpsellingProductsParams) => {
118
43
  }
119
44
  }
120
45
  }
121
- }, [upsellingProducts.loading, upsellingProducts?.products.length])
122
-
123
- const handleFormProduct = (product: any) => {
124
- onNavigationRedirect && onNavigationRedirect('ProductDetails', {
125
- product: product,
126
- businessId: product?.api?.businessId,
127
- businessSlug: business.slug,
128
- })
129
- }
130
-
131
- const UpsellingLayout = () => {
132
- return (
133
- <Container>
134
- <UpsellingContainer
135
- horizontal
136
- showsHorizontalScrollIndicator={false}
137
- contentContainerStyle={{ paddingHorizontal: Platform.OS === 'ios' ? 40 : 0 }}
138
- >
139
- {
140
- !upsellingProducts.loading && (
141
- <>
142
- {
143
- !upsellingProducts.error ? productsList.map((product: any, i: number) => (
144
- <Item key={`${product.id}_${i}`}>
145
- <View style={{ flexBasis: '57%' }}>
146
- <Details>
147
- <OText size={12} lineHeight={18} numberOfLines={1} ellipsizeMode='tail'>{product.name}</OText>
148
- <OText size={12} lineHeight={18} color={theme.colors.textNormal}>{parsePrice(product.price)}</OText>
149
- </Details>
150
- <AddButton onPress={() => handleFormProduct(product)}>
151
- <OText size={10} color={theme.colors.primary}>{t('ADD', 'Add')}</OText>
152
- </AddButton>
153
- </View>
154
- <View>
155
- <OIcon url={product?.images || theme?.images?.dummies?.product} style={styles.imageStyle} />
156
- </View>
157
- </Item>
158
- )) : (
159
- <OText>
160
- {upsellingProducts.message}
161
- </OText>
162
- )
163
- }
164
- </>
165
- )
166
- }
167
- </UpsellingContainer>
168
- </Container>
169
- )
170
- }
171
-
172
- const UpsellingContent = () => {
173
- return (
174
- <>
175
- <View style={{ ...styles.headerItem, flex: 1, marginTop: Platform.OS == 'ios' ? 35 : 14 }}>
176
- <TouchableOpacity onPress={() => onGoBack()} style={styles.btnBackArrow}>
177
- <OIcon src={theme.images.general.arrow_left} color={theme.colors.textNormal} />
178
- </TouchableOpacity>
179
- </View>
180
- <ScrollView style={{ marginTop: 10, marginBottom: props.isPage ? 40 : bottom + (Platform.OS == 'ios' ? 96 : 130) }} showsVerticalScrollIndicator={false}>
181
- {productsList.length > 0 &&
182
- <View style={{ paddingHorizontal: 40, overflow: 'visible' }}>
183
- <OText size={16} lineHeight={24} weight={'500'}>{t('WANT_SOMETHING_ELSE', 'Do you want something else?')}</OText>
184
- <UpsellingLayout />
185
- </View>
186
- }
187
- <View style={{ paddingHorizontal: 40 }}>
188
- <OText size={20} lineHeight={30} weight={600} style={{ marginTop: 10, marginBottom: 17 }}>{t('YOUR_CART', 'Your cart')}</OText>
189
- <OrderSummary
190
- cart={cart}
191
- commentDelayTime={commentDelayTime}
192
- isCartPending={cart?.status === 2}
193
- onNavigationRedirect={onNavigationRedirect}
194
- />
195
- </View>
196
- {showCartList && cartList.map((cart: any, i: number) => (
197
- <CartList key={i}>
198
- <Cart
199
- isFromUpselling
200
- cart={cart}
201
- cartuuid={cart.uuid}
202
- hideUpselling
203
- singleBusiness={props.singleBusiness}
204
- isFranchiseApp={props.isFranchiseApp}
205
- isCartsLoading={isCartsLoading}
206
- setIsCartsLoading={setIsCartsLoading}
207
- isMultiCheckout={isMultiCheckout}
208
- onNavigationRedirect={props.onNavigationRedirect}
209
- />
210
- <CartDivider />
211
- </CartList>
212
- ))}
213
- </ScrollView>
214
- <View
215
- style={{
216
- alignItems: 'center',
217
- bottom: props.isPage ? Platform.OS === 'ios' ? 0 : 20 : Platform.OS === 'ios' ? bottom + 59 : bottom + 125
218
- }}
219
- >
220
- <OButton
221
- imgRightSrc=''
222
- text={t('CHECKOUT', 'Checkout')}
223
- style={{ ...styles.closeUpsellingButton }}
224
- textStyle={{ color: theme.colors.white, fontSize: 14 }}
225
- onClick={() => handleUpsellingPage(cart)}
226
- />
227
- </View>
228
- </>
229
- )
230
- }
46
+ }, [upsellingProducts?.loading, upsellingProducts?.products?.length])
231
47
 
232
48
  return (
233
49
  <>
234
50
  {isCustomMode ? (
235
- <UpsellingLayout />
51
+ <UpsellingLayout {...props} productsList={productsList} />
236
52
  ) : (
237
53
  <>
238
54
  {props.isPage ? (
239
- <UpsellingContent />
55
+ <UpsellingContent {...props} cart={cart} productsList={productsList} />
240
56
  ) : (
241
57
  canOpenUpselling && (
242
58
  <OBottomPopup
@@ -245,7 +61,7 @@ const UpsellingProductsUI = (props: UpsellingProductsParams) => {
245
61
  onClose={() => handleUpsellingPage(cart)}
246
62
  isStatusBar
247
63
  >
248
- <UpsellingContent />
64
+ <UpsellingContent {...props} productsList={productsList} />
249
65
  </OBottomPopup>
250
66
  )
251
67
  )}
@@ -59,3 +59,22 @@ export const CartDivider = styled.View`
59
59
  background-color: ${(props: any) => props.theme.colors.backgroundGray100};
60
60
  margin: 20px -40px 0;
61
61
  `
62
+
63
+
64
+ export const TopActionsHeader = styled.TouchableOpacity`
65
+ height: 60px;
66
+ justify-content: center;
67
+ min-width: 30px;
68
+ padding-right: 15px;
69
+ `;
70
+
71
+ export const TopHeader = styled.View`
72
+ width: 100%;
73
+ flex-direction: row;
74
+ align-items: center;
75
+ justify-content: space-between;
76
+ z-index: 1;
77
+ height: 60px;
78
+ min-height: 60px;
79
+ `
80
+