ordering-ui-react-native 0.17.64 → 0.17.65-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 (207) hide show
  1. package/package.json +8 -7
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessesListing/index.tsx +1 -1
  4. package/src/components/OrderCreating/index.tsx +1 -21
  5. package/src/components/PaymentOptionsWebView/index.tsx +29 -8
  6. package/src/components/PhoneInputNumber/index.tsx +6 -2
  7. package/src/components/StripeMethodForm/index.tsx +136 -102
  8. package/src/components/VerifyPhone/styles.tsx +1 -2
  9. package/src/components/shared/OToast.tsx +2 -1
  10. package/src/types/index.tsx +5 -0
  11. package/src/utils/index.tsx +5 -0
  12. package/themes/business/index.tsx +2 -0
  13. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +270 -245
  14. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  15. package/themes/business/src/components/BusinessController/index.tsx +0 -1
  16. package/themes/business/src/components/Chat/index.tsx +123 -111
  17. package/themes/business/src/components/DriverMap/index.tsx +17 -6
  18. package/themes/business/src/components/DriverSchedule/index.tsx +42 -5
  19. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  20. package/themes/business/src/components/LoginForm/Otp/index.tsx +31 -3
  21. package/themes/business/src/components/LoginForm/index.tsx +15 -22
  22. package/themes/business/src/components/MapView/index.tsx +10 -10
  23. package/themes/business/src/components/NewOrderNotification/index.tsx +35 -21
  24. package/themes/business/src/components/NotFoundSource/index.tsx +2 -2
  25. package/themes/business/src/components/OrderDetails/Business.tsx +1 -1
  26. package/themes/business/src/components/OrderDetails/Delivery.tsx +191 -6
  27. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +133 -65
  28. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +64 -63
  29. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
  30. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  31. package/themes/business/src/components/OrderMessage/index.tsx +19 -18
  32. package/themes/business/src/components/OrderSummary/index.tsx +114 -123
  33. package/themes/business/src/components/OrdersOption/index.tsx +32 -75
  34. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +249 -0
  35. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  36. package/themes/business/src/components/PreviousOrders/index.tsx +444 -242
  37. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  38. package/themes/business/src/components/ProductItemAccordion/index.tsx +27 -3
  39. package/themes/business/src/components/ReviewCustomer/index.tsx +30 -15
  40. package/themes/business/src/components/StoresList/index.tsx +3 -4
  41. package/themes/business/src/components/UserProfileForm/index.tsx +11 -13
  42. package/themes/business/src/components/shared/OLink.tsx +33 -13
  43. package/themes/business/src/components/shared/OModal.tsx +16 -9
  44. package/themes/business/src/components/shared/OText.tsx +8 -2
  45. package/themes/business/src/types/index.tsx +28 -12
  46. package/themes/business/src/utils/index.tsx +29 -2
  47. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  48. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  49. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  50. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  51. package/themes/kiosk/src/components/Intro/index.tsx +16 -1
  52. package/themes/kiosk/src/components/LoginForm/index.tsx +7 -9
  53. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  54. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  55. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  56. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +2 -2
  57. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  58. package/themes/original/index.tsx +4 -0
  59. package/themes/original/src/components/AddressDetails/index.tsx +19 -3
  60. package/themes/original/src/components/AddressForm/index.tsx +61 -39
  61. package/themes/original/src/components/AddressList/index.tsx +27 -22
  62. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  63. package/themes/original/src/components/AnalyticsSegment/index.tsx +193 -10
  64. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  65. package/themes/original/src/components/AppleLogin/styles.tsx +3 -1
  66. package/themes/original/src/components/BusinessBasicInformation/index.tsx +153 -96
  67. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +10 -12
  68. package/themes/original/src/components/BusinessController/index.tsx +94 -66
  69. package/themes/original/src/components/BusinessController/styles.tsx +22 -3
  70. package/themes/original/src/components/BusinessFeaturedController/index.tsx +21 -54
  71. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +8 -0
  72. package/themes/original/src/components/BusinessInformation/index.tsx +142 -109
  73. package/themes/original/src/components/BusinessItemAccordion/index.tsx +15 -20
  74. package/themes/original/src/components/BusinessListingSearch/index.tsx +349 -339
  75. package/themes/original/src/components/BusinessListingSearch/styles.tsx +0 -18
  76. package/themes/original/src/components/BusinessPreorder/index.tsx +103 -19
  77. package/themes/original/src/components/BusinessProductsCategories/index.tsx +1 -2
  78. package/themes/original/src/components/BusinessProductsList/index.tsx +15 -7
  79. package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
  80. package/themes/original/src/components/BusinessProductsListing/UpsellingRedirect.tsx +1 -1
  81. package/themes/original/src/components/BusinessProductsListing/index.tsx +684 -555
  82. package/themes/original/src/components/BusinessProductsListing/styles.tsx +2 -2
  83. package/themes/original/src/components/BusinessReviews/index.tsx +3 -1
  84. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  85. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +83 -48
  86. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +0 -1
  87. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  88. package/themes/original/src/components/Cart/index.tsx +77 -50
  89. package/themes/original/src/components/CartContent/index.tsx +117 -20
  90. package/themes/original/src/components/CartContent/styles.tsx +17 -7
  91. package/themes/original/src/components/Checkout/index.tsx +356 -124
  92. package/themes/original/src/components/CitiesControl/index.tsx +1 -1
  93. package/themes/original/src/components/CouponControl/index.tsx +10 -3
  94. package/themes/original/src/components/DriverTips/index.tsx +52 -34
  95. package/themes/original/src/components/FacebookLogin/styles.tsx +3 -1
  96. package/themes/original/src/components/Favorite/index.tsx +8 -9
  97. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  98. package/themes/original/src/components/FavoriteList/index.tsx +1 -35
  99. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  100. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  101. package/themes/original/src/components/GPSButton/index.tsx +6 -4
  102. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +96 -0
  103. package/themes/original/src/components/GiftCard/GiftCardUI/styles.tsx +5 -0
  104. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +100 -0
  105. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +8 -0
  106. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +191 -0
  107. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +8 -0
  108. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +165 -0
  109. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +9 -0
  110. package/themes/original/src/components/GoogleLogin/styles.tsx +1 -1
  111. package/themes/original/src/components/GoogleMap/index.tsx +60 -5
  112. package/themes/original/src/components/Help/index.tsx +8 -8
  113. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +10 -31
  114. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +5 -3
  115. package/themes/original/src/components/HelpGuide/index.tsx +6 -6
  116. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  117. package/themes/original/src/components/HelpOrder/index.tsx +6 -15
  118. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  119. package/themes/original/src/components/Home/index.tsx +13 -4
  120. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  121. package/themes/original/src/components/LoginForm/Otp/index.tsx +54 -15
  122. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  123. package/themes/original/src/components/LoginForm/index.tsx +59 -34
  124. package/themes/original/src/components/LottieAnimation/index.tsx +89 -55
  125. package/themes/original/src/components/MessageListing/index.tsx +16 -42
  126. package/themes/original/src/components/Messages/index.tsx +29 -7
  127. package/themes/original/src/components/MomentOption/index.tsx +195 -90
  128. package/themes/original/src/components/MomentSelector/index.tsx +1 -1
  129. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  130. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +162 -51
  131. package/themes/original/src/components/MultiCheckout/index.tsx +308 -88
  132. package/themes/original/src/components/MultiCheckout/styles.tsx +3 -1
  133. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  134. package/themes/original/src/components/MultiOrdersDetails/index.tsx +68 -21
  135. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  136. package/themes/original/src/components/MyOrders/index.tsx +40 -29
  137. package/themes/original/src/components/NavBar/index.tsx +20 -17
  138. package/themes/original/src/components/NotFoundSource/index.tsx +14 -10
  139. package/themes/original/src/components/Notifications/index.tsx +46 -50
  140. package/themes/original/src/components/Notifications/styles.tsx +6 -3
  141. package/themes/original/src/components/OrderDetails/OrderEta.tsx +76 -0
  142. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +15 -3
  143. package/themes/original/src/components/OrderDetails/index.tsx +190 -363
  144. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  145. package/themes/original/src/components/OrderItAgain/index.tsx +3 -1
  146. package/themes/original/src/components/OrderProgress/index.tsx +33 -56
  147. package/themes/original/src/components/OrderSummary/index.tsx +88 -59
  148. package/themes/original/src/components/OrderTypeSelector/index.tsx +2 -1
  149. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +24 -19
  150. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +14 -14
  151. package/themes/original/src/components/OrdersOption/index.tsx +78 -67
  152. package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
  153. package/themes/original/src/components/PageBanner/index.tsx +106 -31
  154. package/themes/original/src/components/PageBanner/styles.tsx +4 -4
  155. package/themes/original/src/components/PaymentOptionCard/index.tsx +180 -0
  156. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  157. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  158. package/themes/original/src/components/PaymentOptions/index.tsx +78 -35
  159. package/themes/original/src/components/PhoneInputNumber/index.tsx +3 -3
  160. package/themes/original/src/components/ProductForm/index.tsx +105 -30
  161. package/themes/original/src/components/ProductForm/styles.tsx +5 -5
  162. package/themes/original/src/components/ProductItemAccordion/index.tsx +14 -11
  163. package/themes/original/src/components/ProductOptionSubOption/index.tsx +20 -18
  164. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +5 -9
  165. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  166. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -50
  167. package/themes/original/src/components/ProfessionalProfile/index.tsx +36 -7
  168. package/themes/original/src/components/Promotions/index.tsx +5 -4
  169. package/themes/original/src/components/Promotions/styles.tsx +3 -1
  170. package/themes/original/src/components/ReviewOrder/index.tsx +26 -9
  171. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  172. package/themes/original/src/components/ReviewProducts/index.tsx +16 -7
  173. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  174. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  175. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  176. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  177. package/themes/original/src/components/ServiceForm/index.tsx +66 -17
  178. package/themes/original/src/components/Sessions/index.tsx +11 -8
  179. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  180. package/themes/original/src/components/SignupForm/index.tsx +43 -27
  181. package/themes/original/src/components/SingleOrderCard/index.tsx +130 -56
  182. package/themes/original/src/components/SingleOrderCard/styles.tsx +11 -2
  183. package/themes/original/src/components/SingleProductCard/index.tsx +72 -31
  184. package/themes/original/src/components/SingleProductCard/styles.tsx +20 -4
  185. package/themes/original/src/components/SingleProductReview/styles.tsx +1 -1
  186. package/themes/original/src/components/StripeCardsList/index.tsx +49 -5
  187. package/themes/original/src/components/StripeElementsForm/index.tsx +48 -34
  188. package/themes/original/src/components/StripeElementsForm/naked.tsx +12 -1
  189. package/themes/original/src/components/UpsellingProducts/index.tsx +238 -224
  190. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  191. package/themes/original/src/components/UserDetails/index.tsx +3 -1
  192. package/themes/original/src/components/UserFormDetails/index.tsx +76 -7
  193. package/themes/original/src/components/UserFormDetails/styles.tsx +1 -1
  194. package/themes/original/src/components/UserProfile/index.tsx +88 -79
  195. package/themes/original/src/components/UserProfileForm/index.tsx +27 -29
  196. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  197. package/themes/original/src/components/UserVerification/index.tsx +52 -49
  198. package/themes/original/src/components/WalletTransactionItem/index.tsx +2 -2
  199. package/themes/original/src/components/WalletTransactions/index.tsx +3 -3
  200. package/themes/original/src/components/Wallets/index.tsx +66 -30
  201. package/themes/original/src/components/Wallets/styles.tsx +3 -4
  202. package/themes/original/src/components/shared/OButton.tsx +6 -2
  203. package/themes/original/src/components/shared/OInput.tsx +6 -1
  204. package/themes/original/src/components/shared/OModal.tsx +3 -3
  205. package/themes/original/src/types/index.tsx +36 -10
  206. package/themes/original/src/utils/index.tsx +273 -1
  207. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -0,0 +1,108 @@
1
+ import React from 'react'
2
+ import {
3
+ useSession,
4
+ useUtils,
5
+ SingleProfessionalCard as SingleProfessionalCardController
6
+ } from 'ordering-components/native'
7
+ import { useTheme } from 'styled-components/native'
8
+ import { StyleSheet, TouchableOpacity, View } from 'react-native'
9
+ import FastImage from 'react-native-fast-image'
10
+ import { OIcon, OText } from '../../shared'
11
+ import IconAntDesign from 'react-native-vector-icons/AntDesign';
12
+
13
+ const SingleProfessionalCardUI = (props) => {
14
+ const {
15
+ professional,
16
+ handleFavoriteProfessional,
17
+ active,
18
+ handleProfessionalClick
19
+ } = props
20
+
21
+ const theme = useTheme()
22
+ const [{ auth }] = useSession()
23
+ const [{ optimizeImage }] = useUtils()
24
+
25
+ const handleChangeFavorite = () => {
26
+ if (auth) {
27
+ handleFavoriteProfessional && handleFavoriteProfessional(!professional?.favorite)
28
+ }
29
+ }
30
+
31
+ const styles = StyleSheet.create({
32
+ professionalItem: {
33
+ flexDirection: 'row',
34
+ alignItems: 'center',
35
+ borderRadius: 7.6,
36
+ padding: 11,
37
+ borderWidth: 1,
38
+ marginRight: 12,
39
+ minHeight: 64
40
+ },
41
+ photoStyle: {
42
+ width: 42,
43
+ height: 42,
44
+ borderRadius: 7.6
45
+ },
46
+ favoriteIconStyle: {
47
+ width: 16,
48
+ height: 16,
49
+ },
50
+ })
51
+
52
+ return (
53
+ <TouchableOpacity
54
+ onPress={() => handleProfessionalClick(professional)}
55
+ >
56
+ <View
57
+ style={{
58
+ ...styles.professionalItem,
59
+ borderColor: active
60
+ ? theme.colors.primary
61
+ : theme.colors.border
62
+ }}
63
+ >
64
+ {professional?.photo ? (
65
+ <FastImage
66
+ style={styles.photoStyle}
67
+ source={{
68
+ uri: optimizeImage(professional?.photo, 'h_250,c_limit'),
69
+ priority: FastImage.priority.normal,
70
+ }}
71
+ resizeMode={FastImage.resizeMode.cover}
72
+ />
73
+ ) : (
74
+ <OIcon
75
+ src={theme?.images?.general?.user}
76
+ cover={false}
77
+ style={styles.photoStyle}
78
+ />
79
+ )}
80
+ <View style={{ marginLeft: 12 }}>
81
+ <OText
82
+ size={12}
83
+ weight={'400'}
84
+ >
85
+ {professional?.name} {professional?.lastname}
86
+ </OText>
87
+
88
+ <TouchableOpacity
89
+ onPress={() => handleChangeFavorite()}
90
+ >
91
+ {professional?.favorite
92
+ ? <IconAntDesign name='heart' size={16} color={theme.colors.danger5} />
93
+ : <IconAntDesign name='hearto' size={16} color={theme.colors.danger5} />
94
+ }
95
+ </TouchableOpacity>
96
+ </View>
97
+ </View>
98
+ </TouchableOpacity>
99
+ )
100
+ }
101
+
102
+ export const SingleProfessionalCard = (props) => {
103
+ const singleProfessionalCardProps = {
104
+ ...props,
105
+ UIComponent: SingleProfessionalCardUI
106
+ }
107
+ return <SingleProfessionalCardController {...singleProfessionalCardProps} />
108
+ }
@@ -1,21 +1,21 @@
1
1
  import React, { useState } from 'react'
2
- import { ScrollView, TouchableOpacity, View, StyleSheet, Platform } from 'react-native'
3
- import { useUtils, useLanguage } from 'ordering-components/native'
2
+ import { ScrollView, TouchableOpacity, View, StyleSheet } from 'react-native'
3
+ import { useLanguage } from 'ordering-components/native'
4
4
  import { useTheme } from 'styled-components/native'
5
- import FastImage from 'react-native-fast-image'
6
- import { OIcon, OText, OModal } from '../shared'
5
+ import { OText, OModal } from '../shared'
7
6
  import { ProfessionalProfile } from '../ProfessionalProfile'
8
7
  import { ProfessionalFilterParams } from '../../types'
8
+ import { SingleProfessionalCard } from './SingleProfessionalCard'
9
9
 
10
10
  export const ProfessionalFilter = (props: ProfessionalFilterParams) => {
11
11
  const {
12
12
  professionals,
13
13
  professionalSelected,
14
- handleChangeProfessionalSelected
14
+ handleChangeProfessionalSelected,
15
+ handleUpdateProfessionals
15
16
  } = props
16
17
 
17
18
  const theme = useTheme()
18
- const [{ optimizeImage }] = useUtils()
19
19
  const [, t] = useLanguage()
20
20
  const [open, setOpen] = useState(false)
21
21
  const [currentProfessional, setCurrentProfessional] = useState(null)
@@ -30,6 +30,11 @@ export const ProfessionalFilter = (props: ProfessionalFilterParams) => {
30
30
  setOpen(false)
31
31
  }
32
32
 
33
+ const onUpdateProfessionals = (id, changes) => {
34
+ const updatedProfessional = professionals.find(professional => professional.id === id)
35
+ handleUpdateProfessionals({ ...updatedProfessional, ...changes })
36
+ }
37
+
33
38
  const styles = StyleSheet.create({
34
39
  professionalItem: {
35
40
  flexDirection: 'row',
@@ -39,12 +44,7 @@ export const ProfessionalFilter = (props: ProfessionalFilterParams) => {
39
44
  borderWidth: 1,
40
45
  marginRight: 12,
41
46
  minHeight: 64
42
- },
43
- photoStyle: {
44
- width: 42,
45
- height: 42,
46
- borderRadius: 7.6
47
- }
47
+ }
48
48
  })
49
49
 
50
50
  return (
@@ -73,44 +73,14 @@ export const ProfessionalFilter = (props: ProfessionalFilterParams) => {
73
73
  </OText>
74
74
  </View>
75
75
  </TouchableOpacity>
76
- {professionals.map((professional: any, i: number) => (
77
- <TouchableOpacity
78
- key={i}
79
- onPress={() => handleOpenProfile(professional)}
80
- >
81
- <View
82
- style={{
83
- ...styles.professionalItem,
84
- borderColor: (professional?.id === professionalSelected?.id)
85
- ? theme.colors.primary
86
- : theme.colors.border
87
- }}
88
- >
89
- {professional?.photo ? (
90
- <FastImage
91
- style={styles.photoStyle}
92
- source={{
93
- uri: optimizeImage(professional?.photo, 'h_250,c_limit'),
94
- priority: FastImage.priority.normal,
95
- }}
96
- resizeMode={FastImage.resizeMode.cover}
97
- />
98
- ) : (
99
- <OIcon
100
- src={theme?.images?.general?.user}
101
- cover={false}
102
- style={styles.photoStyle}
103
- />
104
- )}
105
- <OText
106
- size={12}
107
- style={{ marginLeft: 12 }}
108
- weight={'400'}
109
- >
110
- {professional?.name} {professional?.lastname}
111
- </OText>
112
- </View>
113
- </TouchableOpacity>
76
+ {professionals.map((professional: any) => (
77
+ <SingleProfessionalCard
78
+ key={professional.id}
79
+ professional={professional}
80
+ active={professional?.id === professionalSelected?.id}
81
+ handleProfessionalClick={handleOpenProfile}
82
+ handleUpdateProfessionals={onUpdateProfessionals}
83
+ />
114
84
  ))}
115
85
  </ScrollView>
116
86
  <OModal
@@ -1,5 +1,5 @@
1
1
  import React, { useState, useEffect, useRef } from 'react'
2
- import { StyleSheet, Platform, View, Dimensions } from 'react-native'
2
+ import { StyleSheet, Platform, View, Dimensions, Text } from 'react-native'
3
3
  import { useUtils, useLanguage, useConfig } from 'ordering-components/native'
4
4
  import { useTheme } from 'styled-components/native'
5
5
  import CalendarPicker from 'react-native-calendar-picker'
@@ -60,7 +60,12 @@ export const ProfessionalProfile = (props: ProfessionalProfileParams) => {
60
60
  },
61
61
  photoStyle: {
62
62
  alignSelf: 'center'
63
- }
63
+ },
64
+ dropDownRow: {
65
+ color: theme.colors.primary,
66
+ fontSize: 14,
67
+ marginHorizontal: 0
68
+ },
64
69
  })
65
70
 
66
71
  const onDateChange = (date: any) => {
@@ -92,6 +97,28 @@ export const ProfessionalProfile = (props: ProfessionalProfileParams) => {
92
97
  setIsEnabled(menu?.schedule?.[day]?.enabled || false)
93
98
  }
94
99
 
100
+ const getMomentTime = (time) => {
101
+ const _moment = moment(`${moment(selectDate).format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm').toDate()
102
+ return _moment
103
+ }
104
+
105
+ const isBusyTime = (professional, selectedMoment) => {
106
+ if (!selectedMoment) return false
107
+ const startDay = moment(selectedMoment).utc().format('d')
108
+ const isStartScheduleEnabled = professional?.schedule?.[startDay]?.enabled
109
+ if (!isStartScheduleEnabled) return true
110
+
111
+ if (professional?.busy_times?.length === 0) return false
112
+
113
+ const busyTimes = professional?.busy_times
114
+
115
+ const valid = busyTimes.some(item => {
116
+ return (moment.utc(item?.start).local().valueOf() <= moment(selectedMoment).valueOf() &&
117
+ moment(selectedMoment).valueOf() < moment.utc(item?.end).local().valueOf())
118
+ })
119
+ return valid
120
+ }
121
+
95
122
  const getTimes = (curdate: any, menu: any) => {
96
123
  validateSelectedDate(curdate, menu)
97
124
  const date = new Date()
@@ -147,7 +174,7 @@ export const ProfessionalProfile = (props: ProfessionalProfileParams) => {
147
174
  }
148
175
 
149
176
  useEffect(() => {
150
- if (selectDate === null) return
177
+ if (selectDate === null || !professional?.schedule) return
151
178
  const _times = getTimes(selectDate, professional)
152
179
  setTimeList(_times)
153
180
  }, [selectDate, professional])
@@ -238,10 +265,12 @@ export const ProfessionalProfile = (props: ProfessionalProfileParams) => {
238
265
  paddingTop: 8,
239
266
  paddingHorizontal: 12
240
267
  }}
241
- rowTextStyle={{
242
- color: theme.colors.disabled,
243
- fontSize: 14,
244
- marginHorizontal: 0
268
+ renderCustomizedRowChild={(item, index) => {
269
+ return (
270
+ <Text style={[styles.dropDownRow, { color: isBusyTime(professional, getMomentTime(item.value)) ? theme.colors.lightGray : theme.colors.primary } ]}>
271
+ {item.text}
272
+ </Text>
273
+ )
245
274
  }}
246
275
  renderDropdownIcon={() => dropDownIcon()}
247
276
  dropdownOverlayColor='transparent'
@@ -19,7 +19,7 @@ import { useTheme } from 'styled-components/native';
19
19
  import { OButton, OIcon, OModal, OText } from '../shared'
20
20
  import { Placeholder, PlaceholderLine } from 'rn-placeholder'
21
21
  import { NotFoundSource } from '../NotFoundSource'
22
- import { View, StyleSheet, ScrollView, Platform, RefreshControl } from 'react-native'
22
+ import { View, StyleSheet, ScrollView, RefreshControl } from 'react-native'
23
23
  import { PromotionParams } from '../../types'
24
24
  import { Container } from '../../layouts/Container'
25
25
 
@@ -99,6 +99,7 @@ const PromotionsUI = (props: PromotionParams) => {
99
99
  return (
100
100
  <Container
101
101
  noPadding
102
+ pt={20}
102
103
  refreshControl={
103
104
  <RefreshControl
104
105
  refreshing={refreshing}
@@ -111,7 +112,7 @@ const PromotionsUI = (props: PromotionParams) => {
111
112
  titleAlign={'center'}
112
113
  onActionLeft={() => navigation.goBack()}
113
114
  showCall={false}
114
- style={{ paddingVertical: Platform.OS === 'ios' ? 0 : 20, marginLeft: 20 }}
115
+ style={{ paddingVertical: 0, marginLeft: 20 }}
115
116
  />
116
117
  <PromotionsContainer>
117
118
  <SearchBarContainer>
@@ -142,7 +143,7 @@ const PromotionsUI = (props: PromotionParams) => {
142
143
  <WrapperSingleOffer key={offer.id}>
143
144
  <SingleOfferContainer>
144
145
  <FastImage
145
- style={{ height: 80, width: 80, aspectRatio: 3 / 2, borderRadius: 8 }}
146
+ style={{ height: 80, width: 80, aspectRatio: 1, borderRadius: 8 }}
146
147
  source={typeof offer?.image !== 'number' ? {
147
148
  uri: optimizeImage(offer?.image, 'h_1024,c_limit'),
148
149
  priority: FastImage.priority.normal,
@@ -211,7 +212,7 @@ const PromotionsUI = (props: PromotionParams) => {
211
212
  </OText>
212
213
  <ScrollView
213
214
  showsVerticalScrollIndicator={false}
214
- style={{ height: '75%' }}
215
+ style={{ height: '68%' }}
215
216
  >
216
217
  {offerSelected?.businesses?.map((business: any) => {
217
218
  return (
@@ -9,6 +9,7 @@ export const PromotionsContainer = styled.View`
9
9
  export const WrapperSingleOffer = styled.View`
10
10
  flex-direction: column;
11
11
  width: 100%;
12
+ margin-bottom: 30px;
12
13
  `
13
14
 
14
15
  export const SingleOfferContainer = styled.View`
@@ -16,11 +17,12 @@ export const SingleOfferContainer = styled.View`
16
17
  width: 100%;
17
18
  justify-content: space-between;
18
19
  align-items: center;
19
- margin-bottom: 20px;
20
+ margin-bottom: 10px;
20
21
  `
21
22
 
22
23
  export const OfferInformation = styled.View`
23
24
  justify-content: space-between;
25
+ min-width: 70%;
24
26
  max-width: 70%;
25
27
  `
26
28
 
@@ -11,7 +11,8 @@ import {
11
11
  ActionContainer,
12
12
  SkipButton,
13
13
  RatingBarContainer,
14
- RatingTextContainer
14
+ RatingTextContainer,
15
+ MultiLogosContainer
15
16
  } from './styles'
16
17
  import { OButton, OIcon, OInput, OText } from '../shared'
17
18
  import { TouchableOpacity, StyleSheet, View, I18nManager } from 'react-native';
@@ -215,14 +216,30 @@ export const ReviewOrderUI = (props: ReviewOrderParams) => {
215
216
  titleWrapStyle={{ paddingHorizontal: 0 }}
216
217
  titleStyle={{ marginRight: 0, marginLeft: 0 }}
217
218
  />
218
- <BusinessLogo>
219
- <View style={styles.logoWrapper}>
220
- <OIcon
221
- url={order?.logo}
222
- width={80}
223
- height={80}
224
- />
225
- </View>
219
+ <BusinessLogo isMulti={order?.business?.length > 1}>
220
+ {typeof order?.logo === 'string' || !order?.logo ? (
221
+ <View style={styles.logoWrapper}>
222
+ <OIcon
223
+ url={order?.logo}
224
+ width={80}
225
+ height={80}
226
+ />
227
+ </View>
228
+ ) : (
229
+ <MultiLogosContainer>
230
+ {order?.logo?.map((logo : string, i : number) => (
231
+ <React.Fragment key={logo}>
232
+ <View style={styles.logoWrapper}>
233
+ <OIcon
234
+ url={logo}
235
+ width={80}
236
+ height={80}
237
+ />
238
+ </View>
239
+ </React.Fragment>
240
+ ))}
241
+ </MultiLogosContainer>
242
+ )}
226
243
  </BusinessLogo>
227
244
  {order?.review ? (
228
245
  <View style={styles.reviewedStyle}>
@@ -42,3 +42,10 @@ export const RatingTextContainer = styled.View`
42
42
  justify-content: space-between;
43
43
  margin-top: 10px;
44
44
  `
45
+
46
+ export const MultiLogosContainer = styled.View`
47
+ display: flex;
48
+ justify-content: space-around;
49
+ flex-direction: row;
50
+ width: 100%;
51
+ `
@@ -74,13 +74,22 @@ const ReviewProductsUI = (props: ReviewProductParams) => {
74
74
  titleWrapStyle={{ paddingHorizontal: 0 }}
75
75
  titleStyle={{ marginRight: 0, marginLeft: 0 }}
76
76
  />
77
- {order?.products?.map((product: any) => !product?.deleted && (
78
- <SingleProductReview
79
- key={product.id}
80
- product={product}
81
- formState={formState}
82
- handleChangeFormState={handleChangeFormState}
83
- />
77
+ {order?.products && order.products.length > 0 && order?.products.map(productsOrder => (
78
+ productsOrder?.length ? productsOrder?.map((product: any, i: any) => !product?.deleted ?
79
+ <SingleProductReview
80
+ key={i}
81
+ product={product}
82
+ formState={formState}
83
+ handleChangeFormState={handleChangeFormState}
84
+ /> : null
85
+ ) : (!productsOrder?.deleted ? (
86
+ <SingleProductReview
87
+ product={productsOrder}
88
+ formState={formState}
89
+ handleChangeFormState={handleChangeFormState}
90
+ />
91
+ ) : null
92
+ )
84
93
  ))}
85
94
  </ReviewProductsContainer>
86
95
 
@@ -8,7 +8,8 @@ import {
8
8
  FormReviews,
9
9
  ActionContainer,
10
10
  RatingStarContainer,
11
- PlacedDate
11
+ PlacedDate,
12
+ MultiLogosContainer
12
13
  } from './styles'
13
14
  import { OButton, OIcon, OText } from '../shared'
14
15
  import { StyleSheet, View, I18nManager } from 'react-native';
@@ -79,13 +80,30 @@ export const ReviewTrigger = (props: any) => {
79
80
  <>
80
81
  <ReviewOrderContainer>
81
82
  <BusinessLogo>
82
- <View style={styles.logoWrapper}>
83
- <OIcon
84
- url={order?.logo}
85
- width={80}
86
- height={80}
87
- />
88
- </View>
83
+ {typeof order?.logo === 'string' || !order?.logo ? (
84
+ <View style={styles.logoWrapper}>
85
+ <OIcon
86
+ url={order?.logo}
87
+ width={80}
88
+ height={80}
89
+ />
90
+ </View>
91
+ ) : (
92
+ <MultiLogosContainer>
93
+ {order?.logo?.map((logo : string, i : number) => (
94
+ <React.Fragment key={logo}>
95
+ <View style={styles.logoWrapper}>
96
+ <OIcon
97
+ url={logo}
98
+ width={80}
99
+ height={80}
100
+ />
101
+ </View>
102
+ </React.Fragment>
103
+ ))}
104
+ </MultiLogosContainer>
105
+
106
+ )}
89
107
  </BusinessLogo>
90
108
  {!!order?.business_name && <OText style={{ textAlign: 'center', marginTop: 15 }} color={theme.colors.textNormal}>{order?.business_name}</OText>}
91
109
  <View style={{ flex: 1, justifyContent: 'flex-end' }}>
@@ -115,4 +133,4 @@ export const ReviewTrigger = (props: any) => {
115
133
  </FloatingBottomContainer>
116
134
  </>
117
135
  )
118
- }
136
+ }
@@ -31,4 +31,11 @@ export const RatingStarContainer = styled.View`
31
31
  `
32
32
  export const PlacedDate = styled.View`
33
33
  margin-top: 30px;
34
- `
34
+ `
35
+
36
+ export const MultiLogosContainer = styled.View`
37
+ display: flex;
38
+ justify-content: space-around;
39
+ flex-direction: row;
40
+ width: 100%;
41
+ `
@@ -0,0 +1,68 @@
1
+ import React, { useState } from 'react'
2
+ import { Platform, View } from 'react-native'
3
+ import { useLanguage } from 'ordering-components/native';
4
+ import { useTheme } from 'styled-components/native';
5
+
6
+ import {
7
+ Accordion,
8
+ AccordionSection,
9
+ DropdownWrapper,
10
+ } from './styles'
11
+ import { OIcon, OText } from '../shared';
12
+
13
+ export const ScheduleAccordion = (props: any) => {
14
+
15
+ const {
16
+ timeFormated,
17
+ schedule,
18
+ weekIndex
19
+ } = props
20
+
21
+ const [isActive, setActiveState] = useState(false)
22
+ const [, t] = useLanguage()
23
+ const theme = useTheme();
24
+
25
+ const daysOfWeek = [
26
+ t('DAY7', 'Sunday'),
27
+ t('DAY1', 'Monday'),
28
+ t('DAY2', 'Tuesday'),
29
+ t('DAY3', 'Wednesday'),
30
+ t('DAY4', 'Thursday'),
31
+ t('DAY5', 'Friday'),
32
+ t('DAY6', 'Saturday'),
33
+ ];
34
+
35
+ return (
36
+ <AccordionSection>
37
+ <Accordion
38
+ onPress={() => setActiveState(!isActive)}
39
+ activeOpacity={1}
40
+ >
41
+ <DropdownWrapper>
42
+ <OText
43
+ mBottom={16}
44
+ mRight={8}
45
+ lineHeight={21}
46
+ size={14}
47
+ weight={Platform.OS === 'android' ? 'bold' : '600'}
48
+ >{daysOfWeek[weekIndex]}</OText>
49
+ <OIcon src={theme.images.general.arrow_down} color={theme.colors.textNormal} width={8} />
50
+ </DropdownWrapper>
51
+ <View style={{ display: isActive ? 'flex' : 'none', paddingStart: 20 }}>
52
+ {schedule?.lapses?.map((lapse: any) => (
53
+ schedule?.enabled ?
54
+ <OText mBottom={16}>
55
+ {timeFormated(lapse.open) +
56
+ ' - ' +
57
+ timeFormated(lapse.close)}
58
+ </OText>
59
+ :
60
+ <OText color={theme.colors.red} mBottom={16}>
61
+ {t('CLOSED', 'Closed')}
62
+ </OText>
63
+ ))}
64
+ </View>
65
+ </Accordion>
66
+ </AccordionSection>
67
+ )
68
+ }
@@ -0,0 +1,14 @@
1
+ import styled from 'styled-components/native'
2
+
3
+ export const AccordionSection = styled.View`
4
+ background: #FFF;
5
+ `
6
+
7
+ export const Accordion = styled.TouchableOpacity`
8
+ flex-direction: column;
9
+ justify-content: space-between;
10
+ `
11
+
12
+ export const DropdownWrapper = styled.View`
13
+ flex-direction: row;
14
+ `