ordering-ui-react-native 0.17.24 → 0.17.25-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 (211) 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 +119 -120
  6. package/src/components/StripeMethodForm/index.tsx +108 -79
  7. package/src/components/VerifyPhone/styles.tsx +1 -2
  8. package/src/components/shared/OToast.tsx +4 -4
  9. package/src/types/index.tsx +5 -0
  10. package/src/utils/index.tsx +7 -1
  11. package/themes/business/index.tsx +2 -0
  12. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +265 -240
  13. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  14. package/themes/business/src/components/BusinessController/index.tsx +0 -1
  15. package/themes/business/src/components/Chat/index.tsx +118 -107
  16. package/themes/business/src/components/DriverMap/index.tsx +17 -6
  17. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  18. package/themes/business/src/components/LoginForm/Otp/index.tsx +120 -0
  19. package/themes/business/src/components/LoginForm/Otp/styles.tsx +7 -0
  20. package/themes/business/src/components/LoginForm/index.tsx +238 -80
  21. package/themes/business/src/components/LoginForm/styles.tsx +10 -0
  22. package/themes/business/src/components/MapView/index.tsx +10 -10
  23. package/themes/business/src/components/NewOrderNotification/index.tsx +43 -50
  24. package/themes/business/src/components/OrderDetails/Delivery.tsx +4 -3
  25. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +90 -47
  26. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +59 -62
  27. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
  28. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  29. package/themes/business/src/components/OrderMessage/index.tsx +18 -17
  30. package/themes/business/src/components/OrderSummary/index.tsx +113 -121
  31. package/themes/business/src/components/OrdersOption/index.tsx +32 -75
  32. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +250 -0
  33. package/themes/business/src/components/PreviousOrders/OrdersGroupedItem.tsx +115 -0
  34. package/themes/business/src/components/PreviousOrders/index.tsx +445 -243
  35. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  36. package/themes/business/src/components/ProductItemAccordion/index.tsx +27 -3
  37. package/themes/business/src/components/ReviewCustomer/index.tsx +41 -24
  38. package/themes/business/src/components/StoresList/index.tsx +2 -2
  39. package/themes/business/src/components/shared/OLink.tsx +33 -13
  40. package/themes/business/src/components/shared/OModal.tsx +16 -9
  41. package/themes/business/src/components/shared/OText.tsx +8 -2
  42. package/themes/business/src/types/index.tsx +32 -2
  43. package/themes/business/src/utils/index.tsx +44 -1
  44. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  45. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  46. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  47. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  48. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  49. package/themes/kiosk/src/components/LoginForm/Otp/index.tsx +92 -0
  50. package/themes/kiosk/src/components/LoginForm/Otp/styles.tsx +7 -0
  51. package/themes/kiosk/src/components/LoginForm/index.tsx +473 -151
  52. package/themes/kiosk/src/components/LoginForm/styles.tsx +14 -1
  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 +3 -2
  57. package/themes/kiosk/src/components/PhoneInputNumber/styles.tsx +1 -3
  58. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  59. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  60. package/themes/kiosk/src/components/shared/OModal.tsx +14 -11
  61. package/themes/kiosk/src/layouts/Container.tsx +7 -1
  62. package/themes/kiosk/src/types/index.d.ts +13 -0
  63. package/themes/kiosk/src/utils/index.tsx +15 -0
  64. package/themes/original/index.tsx +6 -0
  65. package/themes/original/src/components/AddressDetails/index.tsx +29 -11
  66. package/themes/original/src/components/AddressForm/index.tsx +53 -19
  67. package/themes/original/src/components/AddressList/index.tsx +26 -21
  68. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  69. package/themes/original/src/components/AnalyticsSegment/index.tsx +193 -10
  70. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  71. package/themes/original/src/components/BusinessBasicInformation/index.tsx +166 -89
  72. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +9 -7
  73. package/themes/original/src/components/BusinessController/index.tsx +145 -68
  74. package/themes/original/src/components/BusinessController/styles.tsx +22 -9
  75. package/themes/original/src/components/BusinessFeaturedController/index.tsx +21 -54
  76. package/themes/original/src/components/BusinessFeaturedController/styles.tsx +8 -0
  77. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  78. package/themes/original/src/components/BusinessItemAccordion/index.tsx +23 -22
  79. package/themes/original/src/components/BusinessListingSearch/index.tsx +350 -323
  80. package/themes/original/src/components/BusinessPreorder/index.tsx +97 -16
  81. package/themes/original/src/components/BusinessProductsList/index.tsx +20 -11
  82. package/themes/original/src/components/BusinessProductsList/styles.tsx +8 -3
  83. package/themes/original/src/components/BusinessProductsListing/index.tsx +616 -495
  84. package/themes/original/src/components/BusinessProductsListing/styles.tsx +7 -9
  85. package/themes/original/src/components/BusinessReviews/index.tsx +3 -1
  86. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  87. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +105 -78
  88. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  89. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  90. package/themes/original/src/components/Cart/index.tsx +102 -69
  91. package/themes/original/src/components/CartContent/index.tsx +110 -19
  92. package/themes/original/src/components/CartContent/styles.tsx +15 -1
  93. package/themes/original/src/components/Checkout/index.tsx +323 -178
  94. package/themes/original/src/components/Checkout/styles.tsx +4 -2
  95. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  96. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  97. package/themes/original/src/components/CouponControl/index.tsx +10 -3
  98. package/themes/original/src/components/DriverTips/index.tsx +52 -34
  99. package/themes/original/src/components/Favorite/index.tsx +7 -4
  100. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  101. package/themes/original/src/components/FavoriteList/index.tsx +51 -80
  102. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  103. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  104. package/themes/original/src/components/GPSButton/index.tsx +6 -4
  105. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  106. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +96 -0
  107. package/themes/original/src/components/GiftCard/GiftCardUI/styles.tsx +5 -0
  108. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +100 -0
  109. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +8 -0
  110. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +178 -0
  111. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +8 -0
  112. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +165 -0
  113. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +9 -0
  114. package/themes/original/src/components/GoogleMap/index.tsx +15 -4
  115. package/themes/original/src/components/Help/index.tsx +8 -8
  116. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +11 -22
  117. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  118. package/themes/original/src/components/HelpGuide/index.tsx +12 -16
  119. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  120. package/themes/original/src/components/HelpOrder/index.tsx +12 -25
  121. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  122. package/themes/original/src/components/Home/index.tsx +13 -4
  123. package/themes/original/src/components/LanguageSelector/index.tsx +17 -13
  124. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  125. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  126. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  127. package/themes/original/src/components/LoginForm/index.tsx +59 -22
  128. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  129. package/themes/original/src/components/MessageListing/index.tsx +16 -42
  130. package/themes/original/src/components/Messages/index.tsx +32 -10
  131. package/themes/original/src/components/MomentOption/index.tsx +195 -88
  132. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  133. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +197 -116
  134. package/themes/original/src/components/MultiCheckout/index.tsx +288 -86
  135. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  136. package/themes/original/src/components/MultiOrdersDetails/index.tsx +67 -20
  137. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  138. package/themes/original/src/components/MyOrders/index.tsx +55 -51
  139. package/themes/original/src/components/NavBar/index.tsx +6 -11
  140. package/themes/original/src/components/Notifications/index.tsx +46 -50
  141. package/themes/original/src/components/Notifications/styles.tsx +6 -3
  142. package/themes/original/src/components/OrderDetails/OrderEta.tsx +64 -0
  143. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +15 -3
  144. package/themes/original/src/components/OrderDetails/index.tsx +201 -339
  145. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  146. package/themes/original/src/components/OrderItAgain/index.tsx +3 -1
  147. package/themes/original/src/components/OrderProgress/index.tsx +74 -112
  148. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  149. package/themes/original/src/components/OrderSummary/index.tsx +87 -59
  150. package/themes/original/src/components/OrderTypeSelector/index.tsx +3 -2
  151. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +24 -19
  152. package/themes/original/src/components/OrdersOption/index.tsx +96 -88
  153. package/themes/original/src/components/PageBanner/index.tsx +171 -0
  154. package/themes/original/src/components/PageBanner/styles.tsx +11 -0
  155. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  156. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  157. package/themes/original/src/components/PaymentOptions/index.tsx +34 -6
  158. package/themes/original/src/components/PhoneInputNumber/index.tsx +3 -3
  159. package/themes/original/src/components/PlaceSpot/index.tsx +12 -6
  160. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  161. package/themes/original/src/components/ProductForm/index.tsx +230 -261
  162. package/themes/original/src/components/ProductForm/styles.tsx +4 -7
  163. package/themes/original/src/components/ProductItemAccordion/index.tsx +59 -29
  164. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -10
  165. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
  166. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  167. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -50
  168. package/themes/original/src/components/ProfessionalProfile/index.tsx +36 -7
  169. package/themes/original/src/components/Promotions/index.tsx +234 -220
  170. package/themes/original/src/components/Promotions/styles.tsx +10 -3
  171. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  172. package/themes/original/src/components/ReviewOrder/index.tsx +26 -9
  173. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  174. package/themes/original/src/components/ReviewProducts/index.tsx +23 -11
  175. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  176. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  177. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  178. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  179. package/themes/original/src/components/ServiceForm/index.tsx +74 -19
  180. package/themes/original/src/components/Sessions/index.tsx +11 -8
  181. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  182. package/themes/original/src/components/SignupForm/index.tsx +82 -67
  183. package/themes/original/src/components/SingleOrderCard/index.tsx +149 -63
  184. package/themes/original/src/components/SingleOrderCard/styles.tsx +11 -9
  185. package/themes/original/src/components/SingleProductCard/index.tsx +99 -55
  186. package/themes/original/src/components/SingleProductCard/styles.tsx +27 -13
  187. package/themes/original/src/components/SingleProductReview/index.tsx +8 -2
  188. package/themes/original/src/components/SingleProductReview/styles.tsx +1 -1
  189. package/themes/original/src/components/StripeCardsList/index.tsx +9 -2
  190. package/themes/original/src/components/StripeElementsForm/index.tsx +28 -15
  191. package/themes/original/src/components/UpsellingProducts/index.tsx +238 -224
  192. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  193. package/themes/original/src/components/UserDetails/index.tsx +8 -4
  194. package/themes/original/src/components/UserFormDetails/index.tsx +47 -7
  195. package/themes/original/src/components/UserProfile/index.tsx +9 -14
  196. package/themes/original/src/components/UserProfileForm/index.tsx +21 -28
  197. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  198. package/themes/original/src/components/WalletTransactionItem/index.tsx +2 -2
  199. package/themes/original/src/components/Wallets/index.tsx +94 -33
  200. package/themes/original/src/components/Wallets/styles.tsx +2 -0
  201. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  202. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  203. package/themes/original/src/components/shared/OBottomPopup.tsx +1 -1
  204. package/themes/original/src/components/shared/OButton.tsx +6 -2
  205. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  206. package/themes/original/src/components/shared/OInput.tsx +16 -2
  207. package/themes/original/src/components/shared/OModal.tsx +3 -3
  208. package/themes/original/src/layouts/Container.tsx +13 -9
  209. package/themes/original/src/types/index.tsx +36 -9
  210. package/themes/original/src/utils/index.tsx +375 -58
  211. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -56,7 +56,7 @@ const ReviewProductsUI = (props: ReviewProductParams) => {
56
56
  if (order?.driver && !order?.user_review) {
57
57
  onNavigationRedirect('ReviewDriver', { order: order })
58
58
  } else {
59
- onNavigationRedirect('MyOrders')
59
+ onNavigationRedirect('BottomTab', { screen: 'MyOrders' })
60
60
  }
61
61
  }
62
62
  }, [formState])
@@ -67,27 +67,39 @@ const ReviewProductsUI = (props: ReviewProductParams) => {
67
67
  <NavBar
68
68
  title={t('REVIEW_PRODUCT', 'Review product')}
69
69
  titleAlign={'center'}
70
- onActionLeft={() => onNavigationRedirect('MyOrders')}
70
+ onActionLeft={() => onNavigationRedirect('BottomTab', { screen: 'MyOrders' })}
71
71
  showCall={false}
72
72
  btnStyle={{ paddingLeft: 0 }}
73
73
  style={{ flexDirection: 'column', alignItems: 'flex-start' }}
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
 
87
96
  <FloatingBottomContainer>
88
97
  <ActionContainer>
89
98
  <SkipButton
90
- onPress={() => (order?.driver && !order?.user_review) ? onNavigationRedirect('ReviewDriver', { order: order }) : onNavigationRedirect('MyOrders')}
99
+ onPress={() => (order?.driver && !order?.user_review) ?
100
+ onNavigationRedirect('ReviewDriver', { order: order }) :
101
+ onNavigationRedirect('BottomTab', { screen: 'MyOrders' })
102
+ }
91
103
  >
92
104
  <OText weight={700} size={18} color={theme.colors.textNormal}>{t('FRONT_VISUALS_SKIP', 'Skip')}</OText>
93
105
  </SkipButton>
@@ -95,7 +107,7 @@ const ReviewProductsUI = (props: ReviewProductParams) => {
95
107
  textStyle={{ color: theme.colors.white, paddingRight: 10 }}
96
108
  text={order?.driver && !order?.user_review ? t('CONTINUE', 'Continue') : t('SEND_REVIEW', 'Send Review')}
97
109
  style={{ borderRadius: 8 }}
98
- imgRightSrc={theme.images.general.arrow_right}
110
+ imgRightSrc={theme.images.general.arrow_right}
99
111
  imgRightStyle={{ tintColor: theme.colors.white, right: 5, margin: 5 }}
100
112
  isDisabled={formState.loading || formState?.changes?.length === 0}
101
113
  onClick={() => handleContinueClick()}
@@ -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
+ scheduleFormatted,
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
+ {scheduleFormatted(lapse.open) +
56
+ ' - ' +
57
+ scheduleFormatted(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
+ `
@@ -1,6 +1,6 @@
1
1
  import React, { useState, useEffect, useRef } from 'react'
2
2
  import { useTheme } from 'styled-components/native'
3
- import { Platform, View, StyleSheet, Dimensions, ScrollView, TouchableOpacity } from 'react-native'
3
+ import { Platform, View, StyleSheet, Dimensions, ScrollView, TouchableOpacity, Text } from 'react-native'
4
4
  import { OText, OButton, OModal, OIcon } from '../shared'
5
5
  import FastImage from 'react-native-fast-image'
6
6
  import IconAntDesign from 'react-native-vector-icons/AntDesign'
@@ -11,6 +11,8 @@ import FeatherIcon from 'react-native-vector-icons/Feather';
11
11
  import { useSafeAreaInsets } from 'react-native-safe-area-context'
12
12
  import { ServiceFormParams } from '../../types'
13
13
  import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder';
14
+ import uuid from 'react-native-uuid';
15
+ import { orderTypeList } from '../../utils'
14
16
 
15
17
  import {
16
18
  ProductForm as ProductFormController,
@@ -45,7 +47,9 @@ const ServiceFormUI = (props: ServiceFormParams) => {
45
47
  maxProductQuantity,
46
48
  onClose,
47
49
  professionalListState,
48
- isCartProduct
50
+ isCartProduct,
51
+ actionStatus,
52
+ handleCreateGuestUser
49
53
  } = props
50
54
 
51
55
  const theme = useTheme()
@@ -60,11 +64,14 @@ const ServiceFormUI = (props: ServiceFormParams) => {
60
64
  const [selectDate, setSelectedDate] = useState<any>(new Date())
61
65
  const [timeList, setTimeList] = useState<any>([])
62
66
  const [isEnabled, setIsEnabled] = useState(false)
63
- const [timeSelected, setTimeSelected] = useState(null)
67
+ const [timeSelected, setTimeSelected] = useState<string | null>(null)
64
68
  const [dateSelected, setDateSelected] = useState<any>(null)
65
69
  const [isOpen, setIsOpen] = useState(false)
66
70
  const [currentProfessional, setCurrentProfessional] = useState<any>(null)
67
71
 
72
+ const guestCheckoutEnabled = configs?.guest_checkout_enabled?.value === '1'
73
+ const orderTypeEnabled = !orderTypeList[orderState?.options?.type - 1] || configs?.allowed_order_types_guest_checkout?.value?.includes(orderTypeList[orderState?.options?.type - 1])
74
+
68
75
  const dropdownRef = useRef<any>(null)
69
76
 
70
77
  const styles = StyleSheet.create({
@@ -103,17 +110,41 @@ const ServiceFormUI = (props: ServiceFormParams) => {
103
110
  height: 40,
104
111
  marginBottom: 30
105
112
  },
113
+ dropDownRow: {
114
+ color: theme.colors.primary,
115
+ fontSize: 14,
116
+ marginHorizontal: 0
117
+ },
106
118
  professionalList: {
107
119
  paddingHorizontal: 40,
108
- paddingVertical: 30
120
+ paddingVertical: 30,
109
121
  }
110
122
  })
111
123
 
112
- const isBusyTime = (professional: any) => {
113
- if (professional?.busy_times?.length === 0 || !dateSelected) return false
114
- const valid = professional?.busy_times.some((item: any) => {
115
- return moment(item?.start).valueOf() <= moment(dateSelected).valueOf() &&
116
- moment(dateSelected).valueOf() <= moment(item?.end).valueOf()
124
+ const getMomentTime = (time) => {
125
+ const _moment = moment(`${moment(selectDate).format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm').toDate()
126
+ return _moment
127
+ }
128
+
129
+ const isBusyTime = (professional, selectedMoment) => {
130
+ if (!selectedMoment) return false
131
+ const startDay = moment(selectedMoment).utc().format('d')
132
+ const isStartScheduleEnabled = professional?.schedule?.[startDay]?.enabled
133
+ const duration = product?.duration ?? 0
134
+ const endDay = moment(selectedMoment).add(duration - 1, 'minutes').utc().format('d')
135
+ const isEndScheduleEnabled = professional?.schedule?.[endDay]?.enabled
136
+ if (!isStartScheduleEnabled || !isEndScheduleEnabled) return true
137
+
138
+ if (professional?.busy_times?.length === 0) return false
139
+
140
+ const busyTimes = isCartProduct
141
+ ? professional?.busy_times.filter(item => !(item.start === productCart?.calendar_event?.start && item.end === productCart?.calendar_event?.end))
142
+ : [...professional?.busy_times]
143
+ const valid = busyTimes.some(item => {
144
+ return (moment.utc(item?.start).local().valueOf() <= moment(selectedMoment).valueOf() &&
145
+ moment(selectedMoment).valueOf() < moment.utc(item?.end).local().valueOf()) ||
146
+ (moment.utc(item?.start).local().valueOf() < moment(selectedMoment).add(duration, 'minutes').valueOf() &&
147
+ moment(selectedMoment).add(duration, 'minutes').valueOf() < moment.utc(item?.end).local().valueOf())
117
148
  })
118
149
  return valid
119
150
  }
@@ -134,6 +165,11 @@ const ServiceFormUI = (props: ServiceFormParams) => {
134
165
  )
135
166
  }
136
167
 
168
+ const handleUpdateGuest = () => {
169
+ const guestToken = uuid.v4()
170
+ if (guestToken) handleCreateGuestUser({ guest_token: guestToken })
171
+ }
172
+
137
173
  const customDayHeaderStylesCallback = () => {
138
174
  return {
139
175
  textStyle: {
@@ -248,6 +284,12 @@ const ServiceFormUI = (props: ServiceFormParams) => {
248
284
  setCurrentProfessional(professional)
249
285
  }
250
286
  }, [isCartProduct, professionalListState?.professionals])
287
+
288
+ useEffect(() => {
289
+ if (!productCart?.calendar_event?.start) return
290
+ setSelectedDate(moment.utc(productCart?.calendar_event?.start).local())
291
+ setTimeSelected(moment.utc(productCart?.calendar_event?.start).local().format('HH:mm'))
292
+ }, [productCart])
251
293
 
252
294
  return (
253
295
  <>
@@ -359,9 +401,9 @@ const ServiceFormUI = (props: ServiceFormParams) => {
359
401
  size={12}
360
402
  weight={'400'}
361
403
  lineHeight={17}
362
- color={isBusyTime(currentProfessional) ? theme.colors.danger5 : theme.colors.success500}
404
+ color={isBusyTime(currentProfessional, dateSelected) ? theme.colors.danger5 : theme.colors.success500}
363
405
  >
364
- {isBusyTime(currentProfessional)
406
+ {isBusyTime(currentProfessional, dateSelected)
365
407
  ? t('BUSY_ON_SELECTED_TIME', 'Busy on selected time')
366
408
  : t('AVAILABLE', 'Available')
367
409
  }
@@ -409,7 +451,7 @@ const ServiceFormUI = (props: ServiceFormParams) => {
409
451
  {(timeList?.length > 0 && isEnabled) ? (
410
452
  <SelectDropdown
411
453
  ref={dropdownRef}
412
- defaultValue={timeSelected}
454
+ defaultValueByIndex={timeList.findIndex((item: any) => item.value === timeSelected)}
413
455
  data={timeList}
414
456
  onSelect={(selectedItem, index) => {
415
457
  setTimeSelected(selectedItem?.value)
@@ -441,10 +483,12 @@ const ServiceFormUI = (props: ServiceFormParams) => {
441
483
  paddingTop: 8,
442
484
  paddingHorizontal: 12
443
485
  }}
444
- rowTextStyle={{
445
- color: theme.colors.disabled,
446
- fontSize: 14,
447
- marginHorizontal: 0
486
+ renderCustomizedRowChild={(item, index) => {
487
+ return (
488
+ <Text style={[styles.dropDownRow, { color: isBusyTime(currentProfessional, getMomentTime(item.value)) ? theme.colors.lightGray : theme.colors.primary } ]}>
489
+ {item.text}
490
+ </Text>
491
+ )
448
492
  }}
449
493
  renderDropdownIcon={() => dropDownIcon()}
450
494
  dropdownOverlayColor='transparent'
@@ -517,7 +561,7 @@ const ServiceFormUI = (props: ServiceFormParams) => {
517
561
  ? t('SOLD_OUT', 'Sold out')
518
562
  : t('BOOK', 'Book'))}
519
563
  style={styles.buttonStyle}
520
- isDisabled={isSoldOut || maxProductQuantity <= 0 || !currentProfessional?.id || !dateSelected}
564
+ isDisabled={isSoldOut || maxProductQuantity <= 0 || !currentProfessional?.id || !dateSelected || isBusyTime(currentProfessional, dateSelected)}
521
565
  textStyle={{ fontSize: 14, color: theme.colors.white }}
522
566
  />
523
567
  )}
@@ -551,6 +595,17 @@ const ServiceFormUI = (props: ServiceFormParams) => {
551
595
  }}
552
596
  />
553
597
  )}
598
+ {!auth && guestCheckoutEnabled && orderTypeEnabled && (
599
+ <TouchableOpacity style={{ marginTop: 10 }} onPress={handleUpdateGuest}>
600
+ {actionStatus?.loading ? (
601
+ <Placeholder Animation={Fade}>
602
+ <PlaceholderLine width={60} height={20} />
603
+ </Placeholder>
604
+ ) : (
605
+ <OText color={theme.colors.primary} size={13}>{t('WITH_GUEST_USER', 'With Guest user')}</OText>
606
+ )}
607
+ </TouchableOpacity>
608
+ )}
554
609
  </ButtonWrapper>
555
610
  </Container>
556
611
  )}
@@ -604,9 +659,9 @@ const ServiceFormUI = (props: ServiceFormParams) => {
604
659
  size={12}
605
660
  weight={'400'}
606
661
  lineHeight={17}
607
- color={isBusyTime(professional) ? theme.colors.danger5 : theme.colors.success500}
662
+ color={isBusyTime(professional, dateSelected) ? theme.colors.danger5 : theme.colors.success500}
608
663
  >
609
- {isBusyTime(professional)
664
+ {isBusyTime(professional, dateSelected)
610
665
  ? t('BUSY_ON_SELECTED_TIME', 'Busy on selected time')
611
666
  : t('AVAILABLE', 'Available')
612
667
  }
@@ -1,5 +1,5 @@
1
1
  import React, { useState } from 'react'
2
- import { View, TouchableOpacity } from 'react-native'
2
+ import { View, TouchableOpacity, Platform } from 'react-native'
3
3
  import { useLanguage, useSession, useUtils, Sessions as SessionsController } from 'ordering-components/native'
4
4
  import NavBar from '../NavBar'
5
5
  import { SessionsParams } from '../../types'
@@ -12,7 +12,8 @@ import AntIcon from 'react-native-vector-icons/AntDesign'
12
12
  import {
13
13
  SessionsWrapper,
14
14
  SessionItem,
15
- DurationWrapper
15
+ DurationWrapper,
16
+ Container
16
17
  } from './styles'
17
18
 
18
19
  export const SessionsUI = (props: SessionsParams) => {
@@ -27,7 +28,7 @@ export const SessionsUI = (props: SessionsParams) => {
27
28
  const [, t] = useLanguage()
28
29
  const [{ user }] = useSession()
29
30
  const [{ parseDate }] = useUtils()
30
- const theme = useTheme()
31
+ const theme = useTheme()
31
32
  const [confirm, setConfirm] = useState<any>({ open: false, content: null, handleOnAccept: null, id: null, title: null })
32
33
  const goToBack = () => navigation?.canGoBack() && navigation.goBack()
33
34
 
@@ -61,7 +62,9 @@ export const SessionsUI = (props: SessionsParams) => {
61
62
  }
62
63
 
63
64
  return (
64
- <>
65
+ <Container
66
+ pdng={Platform.OS === 'ios' ? '10px' : '0'}
67
+ >
65
68
  <NavBar
66
69
  title={t('SESSIONS', 'Sessions')}
67
70
  titleAlign={'center'}
@@ -77,11 +80,11 @@ export const SessionsUI = (props: SessionsParams) => {
77
80
  <SessionItem key={i}>
78
81
  <Placeholder Animation={Fade}>
79
82
  <View style={{ flexDirection: 'row', alignItems: 'center' }}>
80
- <View style={{ flex: 1}}>
83
+ <View style={{ flex: 1 }}>
81
84
  <PlaceholderLine width={40} />
82
85
  <PlaceholderLine width={40} />
83
86
  </View>
84
- <PlaceholderLine width={5}/>
87
+ <PlaceholderLine width={5} />
85
88
  </View>
86
89
  </Placeholder>
87
90
  </SessionItem>
@@ -120,7 +123,7 @@ export const SessionsUI = (props: SessionsParams) => {
120
123
  style={{ borderRadius: 7.6, marginTop: 20 }}
121
124
  />
122
125
  </SessionsWrapper>
123
- ) : (
126
+ ) : (
124
127
  <OText>{t('YOU_DONT_HAVE_ANY_SESSIONS', 'You don\'t have any sessions')}</OText>
125
128
  )
126
129
  )}
@@ -147,7 +150,7 @@ export const SessionsUI = (props: SessionsParams) => {
147
150
  onCancel={() => setConfirm({ ...confirm, open: false, title: null })}
148
151
  onClose={() => setConfirm({ ...confirm, open: false, title: null })}
149
152
  />
150
- </>
153
+ </Container>
151
154
  )
152
155
  }
153
156
 
@@ -13,3 +13,8 @@ export const SessionItem = styled.View`
13
13
  export const DurationWrapper = styled.View`
14
14
  /* flex-direction: row; */
15
15
  `
16
+
17
+ export const Container = styled.View`
18
+ padding-top: ${(props: any) => props.pdng};
19
+ margin-bottom: 50px;
20
+ `