ordering-ui-react-native 0.16.58 → 0.16.59-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 (199) 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 +40 -32
  28. package/themes/business/src/components/DriverMap/index.tsx +7 -5
  29. package/themes/business/src/components/LoginForm/index.tsx +111 -74
  30. package/themes/business/src/components/MapView/index.tsx +12 -1
  31. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  32. package/themes/business/src/components/NewOrderNotification/index.tsx +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 +76 -77
  37. package/themes/business/src/components/OrdersOption/styles.tsx +5 -1
  38. package/themes/business/src/components/OrdersOptionBusiness/index.tsx +15 -1
  39. package/themes/business/src/components/OrdersOptionCity/index.tsx +15 -1
  40. package/themes/business/src/components/OrdersOptionDate/index.tsx +19 -6
  41. package/themes/business/src/components/OrdersOptionDelivery/index.tsx +15 -1
  42. package/themes/business/src/components/OrdersOptionDriver/index.tsx +15 -1
  43. package/themes/business/src/components/OrdersOptionPaymethod/index.tsx +15 -1
  44. package/themes/business/src/components/OrdersOptionStatus/index.tsx +10 -1
  45. package/themes/business/src/components/PreviousMessages/index.tsx +17 -18
  46. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  47. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  48. package/themes/business/src/components/PreviousOrders/index.tsx +440 -245
  49. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  50. package/themes/business/src/components/ProductItemAccordion/index.tsx +3 -2
  51. package/themes/business/src/components/ReviewCustomer/index.tsx +39 -15
  52. package/themes/business/src/components/UserFormDetails/index.tsx +5 -2
  53. package/themes/business/src/components/UserProfileForm/index.tsx +2 -0
  54. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  55. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  56. package/themes/business/src/components/shared/OLink.tsx +33 -13
  57. package/themes/business/src/components/shared/OText.tsx +8 -2
  58. package/themes/business/src/types/index.tsx +25 -11
  59. package/themes/business/src/utils/index.tsx +10 -0
  60. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  61. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  62. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  63. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  64. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  65. package/themes/kiosk/src/components/LoginForm/index.tsx +121 -10
  66. package/themes/kiosk/src/components/LoginForm/styles.tsx +5 -0
  67. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  68. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  69. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  70. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  71. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  72. package/themes/kiosk/src/types/index.d.ts +2 -0
  73. package/themes/original/index.tsx +8 -0
  74. package/themes/original/src/components/AddressDetails/index.tsx +10 -8
  75. package/themes/original/src/components/AddressForm/index.tsx +153 -137
  76. package/themes/original/src/components/AddressList/index.tsx +1 -1
  77. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  78. package/themes/original/src/components/BusinessBasicInformation/index.tsx +53 -37
  79. package/themes/original/src/components/BusinessController/index.tsx +112 -48
  80. package/themes/original/src/components/BusinessController/styles.tsx +14 -9
  81. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  82. package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -6
  83. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  84. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  85. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  86. package/themes/original/src/components/BusinessListingSearch/index.tsx +87 -142
  87. package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
  88. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +87 -0
  89. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/styles.tsx +12 -0
  90. package/themes/original/src/components/BusinessProductsList/index.tsx +59 -61
  91. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  92. package/themes/original/src/components/BusinessProductsListing/index.tsx +177 -81
  93. package/themes/original/src/components/BusinessProductsListing/styles.tsx +14 -12
  94. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
  95. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  96. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +112 -107
  97. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  98. package/themes/original/src/components/BusinessesListing/index.tsx +16 -9
  99. package/themes/original/src/components/Cart/index.tsx +108 -18
  100. package/themes/original/src/components/Cart/styles.tsx +4 -0
  101. package/themes/original/src/components/CartContent/index.tsx +31 -17
  102. package/themes/original/src/components/CartContent/styles.tsx +1 -1
  103. package/themes/original/src/components/Checkout/index.tsx +114 -117
  104. package/themes/original/src/components/Checkout/styles.tsx +4 -3
  105. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  106. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  107. package/themes/original/src/components/DriverTips/index.tsx +4 -4
  108. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  109. package/themes/original/src/components/FavoriteList/index.tsx +69 -45
  110. package/themes/original/src/components/FloatingButton/index.tsx +0 -1
  111. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  112. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  113. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  114. package/themes/original/src/components/GoogleMap/index.tsx +10 -1
  115. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +25 -10
  116. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +4 -0
  117. package/themes/original/src/components/HelpGuide/index.tsx +9 -8
  118. package/themes/original/src/components/HelpOrder/index.tsx +9 -8
  119. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  120. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  121. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  122. package/themes/original/src/components/LoginForm/index.tsx +98 -41
  123. package/themes/original/src/components/LottieAnimation/index.tsx +69 -0
  124. package/themes/original/src/components/Messages/index.tsx +35 -20
  125. package/themes/original/src/components/MomentOption/index.tsx +8 -6
  126. package/themes/original/src/components/MultiCart/index.tsx +63 -0
  127. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
  128. package/themes/original/src/components/MultiCheckout/index.tsx +96 -65
  129. package/themes/original/src/components/MultiOrdersDetails/index.tsx +34 -16
  130. package/themes/original/src/components/MyOrders/index.tsx +89 -25
  131. package/themes/original/src/components/NavBar/index.tsx +11 -5
  132. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  133. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  134. package/themes/original/src/components/Notifications/index.tsx +148 -0
  135. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  136. package/themes/original/src/components/OrderDetails/index.tsx +114 -15
  137. package/themes/original/src/components/OrderDetails/styles.tsx +15 -2
  138. package/themes/original/src/components/OrderItAgain/index.tsx +75 -0
  139. package/themes/original/src/components/OrderItAgain/styles.tsx +10 -0
  140. package/themes/original/src/components/OrderProgress/index.tsx +77 -66
  141. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  142. package/themes/original/src/components/OrderSummary/index.tsx +2 -35
  143. package/themes/original/src/components/OrderTypeSelector/index.tsx +85 -36
  144. package/themes/original/src/components/OrderTypeSelector/styles.tsx +19 -1
  145. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +94 -98
  146. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  147. package/themes/original/src/components/OrdersOption/index.tsx +95 -55
  148. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  149. package/themes/original/src/components/PaymentOptions/index.tsx +1 -2
  150. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  151. package/themes/original/src/components/PlaceSpot/index.tsx +249 -47
  152. package/themes/original/src/components/PlaceSpot/styles.tsx +0 -2
  153. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  154. package/themes/original/src/components/ProductForm/index.tsx +379 -396
  155. package/themes/original/src/components/ProductForm/styles.tsx +7 -12
  156. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  157. package/themes/original/src/components/ProductOption/index.tsx +1 -1
  158. package/themes/original/src/components/ProductOptionSubOption/index.tsx +16 -8
  159. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +0 -1
  160. package/themes/original/src/components/ProfessionalFilter/index.tsx +2 -1
  161. package/themes/original/src/components/ProfessionalProfile/index.tsx +19 -8
  162. package/themes/original/src/components/Promotions/index.tsx +232 -219
  163. package/themes/original/src/components/Promotions/styles.tsx +7 -2
  164. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  165. package/themes/original/src/components/ReviewOrder/index.tsx +43 -11
  166. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  167. package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
  168. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  169. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  170. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  171. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  172. package/themes/original/src/components/ServiceForm/index.tsx +330 -266
  173. package/themes/original/src/components/SignupForm/index.tsx +134 -89
  174. package/themes/original/src/components/SingleOrderCard/index.tsx +224 -132
  175. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  176. package/themes/original/src/components/SingleProductCard/index.tsx +116 -72
  177. package/themes/original/src/components/SingleProductCard/styles.tsx +2 -9
  178. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  179. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  180. package/themes/original/src/components/StripeElementsForm/index.tsx +13 -2
  181. package/themes/original/src/components/UpsellingProducts/index.tsx +15 -5
  182. package/themes/original/src/components/UserDetails/index.tsx +5 -3
  183. package/themes/original/src/components/UserFormDetails/index.tsx +6 -48
  184. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  185. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  186. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  187. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  188. package/themes/original/src/components/Wallets/index.tsx +176 -164
  189. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  190. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  191. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  192. package/themes/original/src/components/shared/OBottomPopup.tsx +11 -7
  193. package/themes/original/src/components/shared/OButton.tsx +8 -3
  194. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  195. package/themes/original/src/components/shared/OInput.tsx +10 -1
  196. package/themes/original/src/layouts/Container.tsx +13 -9
  197. package/themes/original/src/types/index.tsx +63 -8
  198. package/themes/original/src/utils/index.tsx +103 -58
  199. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -28,6 +28,7 @@ import {
28
28
  TimeItem
29
29
  } from './styles';
30
30
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
31
+ import { locale, monthsEnum } from '../../utils';
31
32
 
32
33
  const MomentOptionUI = (props: MomentOptionParams) => {
33
34
  const {
@@ -258,7 +259,7 @@ const MomentOptionUI = (props: MomentOptionParams) => {
258
259
  onActionLeft={() => goToBack()}
259
260
  btnStyle={{ paddingLeft: 0 }}
260
261
  paddingTop={0}
261
- style={{ paddingBottom: 0, flexDirection: 'column', alignItems: 'flex-start' }}
262
+ style={{ paddingBottom: 0 }}
262
263
  title={t('QUESTION_WHEN_ORDER', 'When do you want your order?')}
263
264
  titleAlign={'center'}
264
265
  titleStyle={{ fontSize: 14, marginRight: 0, marginLeft: 0 }}
@@ -281,7 +282,7 @@ const MomentOptionUI = (props: MomentOptionParams) => {
281
282
  style={{ marginEnd: 24 }}
282
283
  />
283
284
  )}
284
- <OText color={optionSelected.isAsap ? theme.colors.textNormal : theme.colors.disabled}>{t('ASAP_ABBREVIATION', 'ASAP') + ` (${moment().format('dddd, MMM D, yyyy h:mm A')} + delivery time)`}</OText>
285
+ <OText color={optionSelected.isAsap ? theme.colors.textNormal : theme.colors.disabled}>{t('ASAP_ABBREVIATION', 'ASAP') + ` (${t(moment().format('dddd')?.toLocaleUpperCase(), moment().format('dddd'))}, ${t(monthsEnum[moment().format('MMM')], moment().format('MMM'))}${moment().format(' D, yyyy h:mm A')} + ${t('DELIVERY_TIME', 'delivery time')})`}</OText>
285
286
  </WrapSelectOption>
286
287
  <WrapSelectOption
287
288
  onPress={() => setOptionSelected({ isAsap: false, isSchedule: true })}
@@ -308,6 +309,7 @@ const MomentOptionUI = (props: MomentOptionParams) => {
308
309
  {selectDate && datesWhitelist[0]?.start !== null && (
309
310
  <CalendarStrip
310
311
  scrollable
312
+ locale={locale}
311
313
  style={styles.calendar}
312
314
  calendarHeaderContainerStyle={styles.calendarHeaderContainer}
313
315
  calendarHeaderStyle={styles.calendarHeader}
@@ -342,12 +344,12 @@ const MomentOptionUI = (props: MomentOptionParams) => {
342
344
  style={{
343
345
  lineHeight: 24
344
346
  }}
345
- >{is12hours ? (
346
- time.startTime.includes('12')
347
+ >{is12hours ? (
348
+ time.startTime.includes('12')
347
349
  ? `${time.startTime}PM`
348
350
  : parseTime(moment(time.startTime, 'HH:mm'), { outputFormat: 'hh:mma' })
349
- ) : time.startTime
350
- }</OText>
351
+ ) : time.startTime
352
+ }</OText>
351
353
  </TimeItem>
352
354
  </TouchableOpacity>
353
355
  ))}
@@ -0,0 +1,63 @@
1
+ import React from 'react'
2
+ import { ChAddress, ChContainer, ChSection, ChUserDetails, DeliveryOptionsContainer } from '../Checkout/styles'
3
+ import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder'
4
+ import { Container } from '../../layouts/Container';
5
+ import { View, StyleSheet } from 'react-native'
6
+ import { useTheme } from 'styled-components/native';
7
+ import { MultiCartCreate } from 'ordering-components/native'
8
+
9
+ export const MultiCartUI = () => {
10
+ const theme = useTheme();
11
+
12
+ const styles = StyleSheet.create({
13
+ pagePadding: {
14
+ paddingHorizontal: 40
15
+ }
16
+ })
17
+
18
+ return (
19
+ <>
20
+ <Container noPadding>
21
+ <ChContainer style={styles.pagePadding}>
22
+ <ChSection>
23
+ <ChUserDetails>
24
+ <Placeholder Animation={Fade}>
25
+ <PlaceholderLine height={20} />
26
+ <PlaceholderLine height={12} />
27
+ <PlaceholderLine height={12} />
28
+ <PlaceholderLine height={12} style={{ marginBottom: 20 }} />
29
+ </Placeholder>
30
+ </ChUserDetails>
31
+ <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginHorizontal: -40 }} />
32
+ </ChSection>
33
+ <DeliveryOptionsContainer>
34
+ <View style={{ height: 110 }}>
35
+ <Placeholder Animation={Fade}>
36
+ <PlaceholderLine height={20} />
37
+ <PlaceholderLine height={40} />
38
+ </Placeholder>
39
+ </View>
40
+ </DeliveryOptionsContainer>
41
+ <ChSection>
42
+ <ChAddress>
43
+ <Placeholder Animation={Fade}>
44
+ <PlaceholderLine height={20} style={{ marginBottom: 50 }} />
45
+ <PlaceholderLine height={100} />
46
+ </Placeholder>
47
+ </ChAddress>
48
+ <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginTop: 13, marginHorizontal: -40 }} />
49
+ </ChSection>
50
+ </ChContainer>
51
+ </Container>
52
+
53
+ </>
54
+ )
55
+ }
56
+
57
+ export const MultiCart = (props : any) => {
58
+ const mulcartProps = {
59
+ ...props,
60
+ UIComponent: MultiCartUI
61
+ }
62
+ return <MultiCartCreate {...mulcartProps} />
63
+ }
@@ -7,7 +7,7 @@ import {
7
7
  } from 'ordering-components/native'
8
8
  import { useTheme } from 'styled-components/native'
9
9
  import { View, TouchableOpacity, FlatList, StyleSheet, KeyboardAvoidingView, Platform } from 'react-native'
10
- import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder'
10
+ import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder'
11
11
  import { OText, OIcon, OModal, OButton } from '../shared'
12
12
  import { getIconCard, flatArray } from '../../utils'
13
13
  import { StripeElementsForm } from '../StripeElementsForm'
@@ -25,7 +25,6 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
25
25
  businessIds,
26
26
  paymethodsAndWallets,
27
27
  walletsState,
28
- businessPaymethods,
29
28
  paymethodSelected,
30
29
  handleSelectPaymethod,
31
30
  handleSelectWallet,
@@ -37,7 +36,7 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
37
36
  const [{ configs }] = useConfig()
38
37
  const [{ parsePrice }] = useUtils()
39
38
 
40
- const [addCardOpen, setAddCardOpen] = useState({ stripe: false, stripeConnect: false });
39
+ const [addCardOpen, setAddCardOpen] = useState({ stripe: false, stripeConnect: false });
41
40
 
42
41
  const isWalletCashEnabled = configs?.wallet_cash_enabled?.value === '1'
43
42
  const isWalletPointsEnabled = configs?.wallet_credit_point_enabled?.value === '1'
@@ -54,52 +53,52 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
54
53
  }
55
54
 
56
55
  const getPayIcon = (method: string) => {
57
- switch (method) {
58
- case 'cash':
59
- return theme.images.general.cash
60
- case 'card_delivery':
61
- return theme.images.general.carddelivery
62
- case 'paypal':
63
- return theme.images.general.paypal
64
- case 'stripe':
65
- return theme.images.general.stripe
66
- case 'stripe_direct':
67
- return theme.images.general.stripecc
68
- case 'stripe_connect':
69
- return theme.images.general.stripes
70
- case 'stripe_redirect':
71
- return theme.images.general.stripesb
72
- default:
73
- return theme.images.general.creditCard
74
- }
75
- }
56
+ switch (method) {
57
+ case 'cash':
58
+ return theme.images.general.cash
59
+ case 'card_delivery':
60
+ return theme.images.general.carddelivery
61
+ case 'paypal':
62
+ return theme.images.general.paypal
63
+ case 'stripe':
64
+ return theme.images.general.stripe
65
+ case 'stripe_direct':
66
+ return theme.images.general.stripecc
67
+ case 'stripe_connect':
68
+ return theme.images.general.stripes
69
+ case 'stripe_redirect':
70
+ return theme.images.general.stripesb
71
+ default:
72
+ return theme.images.general.creditCard
73
+ }
74
+ }
76
75
 
77
76
  const renderPaymethods = ({ item }: any) => {
78
- return (
79
- <TouchableOpacity
80
- onPress={() => handleSelectPaymethod(item)}
81
- >
82
- <PMItem
83
- key={item.id}
84
- isActive={paymethodSelected?.paymethod_id === item.paymethod_id}
85
- >
86
- <OIcon
87
- src={getPayIcon(item.paymethod?.gateway)}
88
- width={20}
89
- height={20}
90
- color={paymethodSelected?.paymethod_id === item.paymethod_id ? theme.colors.white : theme.colors.backgroundDark}
91
- />
92
- <OText
93
- size={10}
94
- style={{ margin: 0, marginTop: 4 }}
95
- color={paymethodSelected?.paymethod_id === item.paymethod_id ? theme.colors.white : '#000'}
96
- >
97
- {t(item?.paymethod?.gateway.toUpperCase(), item?.paymethod?.name)}
98
- </OText>
99
- </PMItem>
100
- </TouchableOpacity>
101
- )
102
- }
77
+ return (
78
+ <TouchableOpacity
79
+ onPress={() => handleSelectPaymethod({ ...item, paymethod: { gateway: item.gateway }, paymethod_id: item?.id })}
80
+ >
81
+ <PMItem
82
+ key={item.id}
83
+ isActive={paymethodSelected?.id === item.id}
84
+ >
85
+ <OIcon
86
+ src={getPayIcon(item.paymethod?.gateway)}
87
+ width={20}
88
+ height={20}
89
+ color={paymethodSelected?.id === item.id ? theme.colors.white : theme.colors.backgroundDark}
90
+ />
91
+ <OText
92
+ size={10}
93
+ style={{ margin: 0, marginTop: 4 }}
94
+ color={paymethodSelected?.id === item.id ? theme.colors.white : '#000'}
95
+ >
96
+ {t(item?.gateway.toUpperCase(), item?.name)}
97
+ </OText>
98
+ </PMItem>
99
+ </TouchableOpacity>
100
+ )
101
+ }
103
102
 
104
103
  return (
105
104
  <PMContainer>
@@ -123,10 +122,10 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
123
122
  ) : (
124
123
  <FlatList
125
124
  horizontal
126
- showsHorizontalScrollIndicator={false}
127
- data={businessPaymethods.result.filter((paymethod: any) => paymethodsAndWallets.paymethods.find((item: any) => item.id === paymethod.paymethod_id))}
128
- renderItem={renderPaymethods}
129
- keyExtractor={(paymethod: any) => paymethod?.id?.toString?.()}
125
+ showsHorizontalScrollIndicator={false}
126
+ data={paymethodsAndWallets.paymethods}
127
+ renderItem={renderPaymethods}
128
+ keyExtractor={(paymethod: any) => paymethod?.id?.toString?.()}
130
129
  />
131
130
  )}
132
131
  {!paymethodsAndWallets.loading && !paymethodsAndWallets.error && paymethodsAndWallets.paymethods.length === 0 && (
@@ -138,22 +137,22 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
138
137
  {paymethodSelected?.paymethod?.gateway === 'stripe' && (
139
138
  <View>
140
139
  <OButton
141
- text={t('ADD_PAYMENT_CARD', 'Add New Payment Card')}
142
- bgColor={theme.colors.white}
143
- borderColor={theme.colors.primary}
144
- style={styles.btnAddStyle}
145
- textStyle={{ color: theme.colors.primary, fontSize: 12 }}
146
- imgRightSrc={null}
147
- onClick={() => setAddCardOpen({ ...addCardOpen, stripe: true })}
148
- />
140
+ text={t('ADD_PAYMENT_CARD', 'Add New Payment Card')}
141
+ bgColor={theme.colors.white}
142
+ borderColor={theme.colors.primary}
143
+ style={styles.btnAddStyle}
144
+ textStyle={{ color: theme.colors.primary, fontSize: 12 }}
145
+ imgRightSrc={null}
146
+ onClick={() => setAddCardOpen({ ...addCardOpen, stripe: true })}
147
+ />
149
148
  <StripeCardsList
150
- paymethod={paymethodSelected?.paymethod}
151
- businessId={businessIds[0]}
149
+ paymethod={paymethodSelected?.paymethod}
150
+ businessId={businessIds[0]}
152
151
  businessIds={businessIds}
153
- publicKey={paymethodSelected?.data?.publishable}
154
- payType={paymethodSelected?.paymethod?.name}
155
- onSelectCard={handlePaymethodDataChange}
156
- />
152
+ publicKey={paymethodSelected?.data?.publishable}
153
+ payType={paymethodSelected?.paymethod?.name}
154
+ onSelectCard={handlePaymethodDataChange}
155
+ />
157
156
  </View>
158
157
  )}
159
158
 
@@ -170,7 +169,7 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
170
169
  </>
171
170
  ) : (
172
171
  <>
173
- {walletsState.result.filter((wallet: any) => paymethodsAndWallets.wallets.find((item: any) => item.type === wallet.type)).map((wallet: any, idx: any) => walletName[wallet.type]?.isActive && (
172
+ {walletsState?.result?.filter((wallet: any) => paymethodsAndWallets.wallets.find((item: any) => item.type === wallet.type)).map((wallet: any, idx: any) => walletName[wallet.type]?.isActive && (
174
173
  <WalletItem
175
174
  key={wallet.type}
176
175
  isBottomBorder={idx === paymethodsAndWallets.wallets?.length - 1}
@@ -197,40 +196,40 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
197
196
  )}
198
197
 
199
198
  <OModal
200
- entireModal
201
- title={t('ADD_CREDIT_OR_DEBIT_CARD', 'Add credit or debit card')}
202
- open={addCardOpen.stripe}
203
- onClose={() => setAddCardOpen({ ...addCardOpen, stripe: false })}
204
- style={{ backgroundColor: 'red' }}
205
- >
206
- <KeyboardAvoidingView
207
- behavior={Platform.OS == 'ios' ? 'padding' : 'height'}
208
- keyboardVerticalOffset={Platform.OS == 'ios' ? 0 : 0}
209
- enabled={Platform.OS === 'ios' ? true : false}
210
- >
211
- <StripeElementsForm
212
- toSave
213
- businessId={businessIds[0]}
199
+ entireModal
200
+ title={t('ADD_CREDIT_OR_DEBIT_CARD', 'Add credit or debit card')}
201
+ open={addCardOpen.stripe}
202
+ onClose={() => setAddCardOpen({ ...addCardOpen, stripe: false })}
203
+ style={{ backgroundColor: 'red' }}
204
+ >
205
+ <KeyboardAvoidingView
206
+ behavior={Platform.OS == 'ios' ? 'padding' : 'height'}
207
+ keyboardVerticalOffset={Platform.OS == 'ios' ? 0 : 0}
208
+ enabled={Platform.OS === 'ios' ? true : false}
209
+ >
210
+ <StripeElementsForm
211
+ toSave
212
+ businessId={businessIds[0]}
214
213
  businessIds={businessIds}
215
214
  publicKey={paymethodSelected?.data?.publishable}
216
- requirements={props.clientSecret}
217
- onSelectCard={handlePaymethodDataChange}
218
- onCancel={() => setAddCardOpen({ ...addCardOpen, stripe: false })}
219
- />
220
- </KeyboardAvoidingView>
221
- </OModal>
215
+ requirements={props.clientSecret}
216
+ onSelectCard={handlePaymethodDataChange}
217
+ onCancel={() => setAddCardOpen({ ...addCardOpen, stripe: false })}
218
+ />
219
+ </KeyboardAvoidingView>
220
+ </OModal>
222
221
  </PMContainer>
223
222
  )
224
223
  }
225
224
 
226
225
  const styles = StyleSheet.create({
227
- btnAddStyle: {
228
- marginVertical: 20,
229
- borderRadius: 7.6,
230
- shadowOpacity: 0,
231
- height: 44,
232
- borderWidth: 1
233
- },
226
+ btnAddStyle: {
227
+ marginVertical: 20,
228
+ borderRadius: 7.6,
229
+ shadowOpacity: 0,
230
+ height: 44,
231
+ borderWidth: 1
232
+ },
234
233
  })
235
234
 
236
235
 
@@ -7,7 +7,7 @@ import {
7
7
  useValidationFields,
8
8
  useSession,
9
9
  useToast,
10
- ToastType,
10
+ ToastType,
11
11
  MultiCheckout as MultiCheckoutController
12
12
  } from 'ordering-components/native'
13
13
  import { View, StyleSheet, Platform } from 'react-native'
@@ -36,11 +36,11 @@ import {
36
36
  } from './styles'
37
37
 
38
38
  const mapConfigs = {
39
- mapZoom: 16,
40
- mapSize: {
41
- width: 640,
42
- height: 190
43
- }
39
+ mapZoom: 16,
40
+ mapSize: {
41
+ width: 640,
42
+ height: 190
43
+ }
44
44
  }
45
45
 
46
46
  const MultiCheckoutUI = (props: any) => {
@@ -53,74 +53,78 @@ const MultiCheckoutUI = (props: any) => {
53
53
  paymethodSelected,
54
54
  handleSelectPaymethod,
55
55
  handleSelectWallet,
56
- handlePaymethodDataChange
56
+ handlePaymethodDataChange,
57
+ cartUuid,
58
+ totalCartsFee,
59
+ cartGroup
57
60
  } = props
58
61
 
59
- const theme = useTheme();
62
+ const theme = useTheme();
60
63
  const styles = StyleSheet.create({
61
64
  pagePadding: {
62
- paddingLeft: 40,
63
- paddingRight: 40
64
- },
65
+ paddingLeft: 40,
66
+ paddingRight: 40
67
+ },
65
68
  wrapperNavbar: Platform.OS === 'ios'
66
- ? { paddingVertical: 0, paddingHorizontal: 40 }
67
- : { paddingVertical: 20, paddingHorizontal: 40 }
69
+ ? { paddingVertical: 0, paddingHorizontal: 40 }
70
+ : { paddingVertical: 20, paddingHorizontal: 40 }
68
71
  })
69
72
 
70
- const [, { showToast }] = useToast();
73
+ const [, { showToast }] = useToast();
71
74
  const [, t] = useLanguage()
72
- const [{ configs }] = useConfig();
73
- const [{ parsePrice, parseDate }] = useUtils();
74
- const [{ options, carts, loading }, { confirmCart }] = useOrder();
75
- const [validationFields] = useValidationFields();
75
+ const [{ configs }] = useConfig();
76
+ const [{ parsePrice, parseDate }] = useUtils();
77
+ const [{ options, carts, loading }, { confirmCart }] = useOrder();
78
+ const [validationFields] = useValidationFields();
76
79
  const [{ user }] = useSession()
77
80
 
78
- const configTypes = configs?.order_types_allowed?.value.split('|').map((value: any) => Number(value)) || []
79
- const isPreOrder = configs?.preorder_status_enabled?.value === '1'
81
+ const configTypes = configs?.order_types_allowed?.value.split('|').map((value: any) => Number(value)) || []
82
+ const isPreOrder = configs?.preorder_status_enabled?.value === '1'
80
83
  const maximumCarts = 5
81
- const isDisablePlaceOrderButton = !(paymethodSelected?.paymethod_id || paymethodSelected?.wallet_id) || openCarts.length > maximumCarts
84
+ const isDisablePlaceOrderButton = !(paymethodSelected?.paymethod_id || paymethodSelected?.wallet_id) || openCarts.length > maximumCarts || (paymethodSelected?.paymethod?.gateway === 'stripe' && !paymethodSelected?.paymethod_data)
85
+ const walletCarts = (Object.values(carts)?.filter((cart: any) => cart?.products && cart?.products?.length && cart?.status !== 2 && cart?.valid_schedule && cart?.valid_products && cart?.valid_address && cart?.valid_maximum && cart?.valid_minimum && cart?.wallets) || null) || []
82
86
 
83
- const [isUserDetailsEdit, setIsUserDetailsEdit] = useState(false);
84
- const [phoneUpdate, setPhoneUpdate] = useState(false);
85
- const [userErrors, setUserErrors] = useState<any>([]);
87
+ const [isUserDetailsEdit, setIsUserDetailsEdit] = useState(false);
88
+ const [phoneUpdate, setPhoneUpdate] = useState(false);
89
+ const [userErrors, setUserErrors] = useState<any>([]);
86
90
  const handleMomentClick = () => {
87
- if (isPreOrder) {
88
- navigation.navigate('MomentOption')
89
- }
90
- }
91
+ if (isPreOrder) {
92
+ navigation.navigate('MomentOption')
93
+ }
94
+ }
91
95
 
92
96
  const checkValidationFields = () => {
93
- setUserErrors([])
94
- const errors = []
95
- const notFields = ['coupon', 'driver_tip', 'mobile_phone', 'address', 'zipcode', 'address_notes']
97
+ setUserErrors([])
98
+ const errors = []
99
+ const notFields = ['coupon', 'driver_tip', 'mobile_phone', 'address', 'zipcode', 'address_notes']
96
100
 
97
- Object.values(validationFields?.fields?.checkout).map((field: any) => {
98
- if (field?.required && !notFields.includes(field.code)) {
99
- if (!user[field?.code]) {
100
- errors.push(t(`VALIDATION_ERROR_${field.code.toUpperCase()}_REQUIRED`, `The field ${field?.name} is required`))
101
- }
102
- }
103
- })
101
+ Object.values(validationFields?.fields?.checkout).map((field: any) => {
102
+ if (field?.required && !notFields.includes(field.code)) {
103
+ if (!user[field?.code]) {
104
+ errors.push(t(`VALIDATION_ERROR_${field.code.toUpperCase()}_REQUIRED`, `The field ${field?.name} is required`))
105
+ }
106
+ }
107
+ })
104
108
 
105
- if (
106
- !user?.cellphone &&
107
- ((validationFields?.fields?.checkout?.cellphone?.enabled &&
108
- validationFields?.fields?.checkout?.cellphone?.required) ||
109
- configs?.verification_phone_required?.value === '1')
110
- ) {
111
- errors.push(t('VALIDATION_ERROR_MOBILE_PHONE_REQUIRED', 'The field Phone number is required'))
112
- }
109
+ if (
110
+ !user?.cellphone &&
111
+ ((validationFields?.fields?.checkout?.cellphone?.enabled &&
112
+ validationFields?.fields?.checkout?.cellphone?.required) ||
113
+ configs?.verification_phone_required?.value === '1')
114
+ ) {
115
+ errors.push(t('VALIDATION_ERROR_MOBILE_PHONE_REQUIRED', 'The field Phone number is required'))
116
+ }
113
117
 
114
- if (phoneUpdate) {
115
- errors.push(t('NECESSARY_UPDATE_COUNTRY_PHONE_CODE', 'It is necessary to update your phone number'))
116
- }
118
+ if (phoneUpdate) {
119
+ errors.push(t('NECESSARY_UPDATE_COUNTRY_PHONE_CODE', 'It is necessary to update your phone number'))
120
+ }
117
121
 
118
- setUserErrors(errors)
119
- }
122
+ setUserErrors(errors)
123
+ }
120
124
 
121
125
  const togglePhoneUpdate = (val: boolean) => {
122
- setPhoneUpdate(val)
123
- }
126
+ setPhoneUpdate(val)
127
+ }
124
128
 
125
129
  const handlePlaceOrder = () => {
126
130
  if (!userErrors.length) {
@@ -128,18 +132,18 @@ const MultiCheckoutUI = (props: any) => {
128
132
  return
129
133
  }
130
134
  let stringError = ''
131
- Object.values(userErrors).map((item: any, i: number) => {
132
- stringError += (i + 1) === userErrors.length ? `- ${item?.message || item}` : `- ${item?.message || item}\n`
133
- })
134
- showToast(ToastType.Error, stringError)
135
+ Object.values(userErrors).map((item: any, i: number) => {
136
+ stringError += (i + 1) === userErrors.length ? `- ${item?.message || item}` : `- ${item?.message || item}\n`
137
+ })
138
+ showToast(ToastType.Error, stringError)
135
139
  setIsUserDetailsEdit(true)
136
140
  }
137
141
 
138
142
  useEffect(() => {
139
- if (validationFields && validationFields?.fields?.checkout) {
140
- checkValidationFields()
141
- }
142
- }, [validationFields, user])
143
+ if (validationFields && validationFields?.fields?.checkout) {
144
+ checkValidationFields()
145
+ }
146
+ }, [validationFields, user])
143
147
 
144
148
  return (
145
149
  <>
@@ -224,6 +228,7 @@ const MultiCheckoutUI = (props: any) => {
224
228
  handleSelectPaymethod={handleSelectPaymethod}
225
229
  handleSelectWallet={handleSelectWallet}
226
230
  handlePaymethodDataChange={handlePaymethodDataChange}
231
+ cartUuid={cartUuid}
227
232
  />
228
233
  <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginTop: 13, marginHorizontal: -40 }} />
229
234
  </ChSection>
@@ -241,20 +246,46 @@ const MultiCheckoutUI = (props: any) => {
241
246
  cart={cart}
242
247
  cartuuid={cart.uuid}
243
248
  isMultiCheckout
249
+ hideDeliveryFee={configs?.multi_business_checkout_show_combined_delivery_fee?.value === '1'}
250
+ hideDriverTip={configs?.multi_business_checkout_show_combined_driver_tip?.value === '1'}
244
251
  onNavigationRedirect={(route: string, params: any) => props.navigation.navigate(route, params)}
245
252
  />
246
253
  <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginTop: 13, marginHorizontal: -40 }} />
247
254
  </React.Fragment>
248
255
  ))}
249
- {openCarts.length === 0 && (
256
+ {!cartGroup?.loading && openCarts.length === 0 && (
250
257
  <CCNotCarts>
251
258
  <OText size={24} style={{ textAlign: 'center' }}>
252
259
  {t('CARTS_NOT_FOUND', 'You don\'t have carts available')}
253
260
  </OText>
254
261
  </CCNotCarts>
255
262
  )}
263
+ {walletCarts.length > 0 && (
264
+ <OText size={14} color={theme.colors.danger5} style={{ marginVertical: 20 }}>
265
+ {t('WARNING_PARTIAL_WALLET_CARTS', 'Important: One or more carts can`t be completed due a partial payment with cash/points wallet and requires to be paid individually')}
266
+ </OText>
267
+ )}
256
268
  {openCarts.length > 0 && (
257
269
  <ChCartsTotal>
270
+ {totalCartsFee && configs?.multi_business_checkout_show_combined_delivery_fee?.value === '1' && (
271
+ <View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
272
+ <OText size={14} lineHeight={24} color={theme.colors.textNormal} weight={'400'}>
273
+ {t('TOTAL_DELIVERY_FEE', 'Total delivery fee')}
274
+ </OText>
275
+ <OText size={14} lineHeight={24} color={theme.colors.textNormal} weight={'400'}>{parsePrice(totalCartsFee)}</OText>
276
+ </View>
277
+ )}
278
+ {openCarts.reduce((sum: any, cart: any) => sum + cart?.driver_tip, 0) > 0 &&
279
+ configs?.multi_business_checkout_show_combined_driver_tip?.value === '1' && (
280
+ <View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
281
+ <OText size={14} lineHeight={24} color={theme.colors.textNormal} weight={'400'}>
282
+ {t('DRIVER_TIP', 'Driver tip')}
283
+ </OText>
284
+ <OText size={14} lineHeight={24} color={theme.colors.textNormal} weight={'400'}>
285
+ {parsePrice(openCarts.reduce((sum: any, cart: any) => sum + cart?.driver_tip, 0))}
286
+ </OText>
287
+ </View>
288
+ )}
258
289
  <View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
259
290
  <OText size={16} lineHeight={24} color={theme.colors.textNormal} weight={'500'}>
260
291
  {t('TOTAL_FOR_ALL_CARTS', 'Total for all Carts')}
@@ -275,14 +306,14 @@ const MultiCheckoutUI = (props: any) => {
275
306
  </ChSection>
276
307
  </ChContainer>
277
308
  </Container>
278
-
309
+
279
310
  <FloatingButton
280
- handleClick={() => handlePlaceOrder()}
311
+ handleClick={() => handlePlaceOrder()}
281
312
  isSecondaryBtn={isDisablePlaceOrderButton}
282
313
  disabled={isDisablePlaceOrderButton}
283
314
  btnText={placing ? t('PLACING', 'Placing') : t('PLACE_ORDER', 'Place Order')}
284
315
  btnRightValueShow
285
- btnRightValue={parsePrice(totalCartsPrice)}
316
+ btnRightValue={parsePrice(totalCartsPrice)}
286
317
  iosBottom={30}
287
318
  />
288
319
  </>