ordering-ui-react-native 0.16.82 → 0.16.83-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 (218) hide show
  1. package/package.json +5 -5
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/ActiveOrders/styles.tsx +8 -14
  4. package/src/components/BusinessInformation/index.tsx +19 -4
  5. package/src/components/BusinessInformation/styles.tsx +2 -2
  6. package/src/components/BusinessProductsList/index.tsx +10 -10
  7. package/src/components/BusinessesListing/index.tsx +1 -1
  8. package/src/components/LanguageSelector/index.tsx +21 -16
  9. package/src/components/Messages/index.tsx +2 -2
  10. package/src/components/OrderCreating/index.tsx +1 -21
  11. package/src/components/OrdersOption/index.tsx +54 -56
  12. package/src/components/PaymentOptionsWebView/index.tsx +119 -120
  13. package/src/components/SingleProductReview/index.tsx +7 -4
  14. package/src/components/VerifyPhone/styles.tsx +1 -2
  15. package/src/components/shared/OToast.tsx +4 -4
  16. package/src/utils/index.tsx +2 -1
  17. package/themes/business/index.tsx +2 -0
  18. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +260 -238
  19. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +6 -4
  20. package/themes/business/src/components/BusinessController/index.tsx +2 -2
  21. package/themes/business/src/components/Chat/index.tsx +31 -31
  22. package/themes/business/src/components/DriverMap/index.tsx +22 -9
  23. package/themes/business/src/components/GoogleMap/index.tsx +58 -57
  24. package/themes/business/src/components/LoginForm/Otp/index.tsx +120 -0
  25. package/themes/business/src/components/LoginForm/Otp/styles.tsx +7 -0
  26. package/themes/business/src/components/LoginForm/index.tsx +236 -80
  27. package/themes/business/src/components/LoginForm/styles.tsx +10 -0
  28. package/themes/business/src/components/MapView/index.tsx +19 -8
  29. package/themes/business/src/components/MessagesOption/index.tsx +11 -1
  30. package/themes/business/src/components/NewOrderNotification/index.tsx +31 -41
  31. package/themes/business/src/components/OrderDetails/Delivery.tsx +4 -3
  32. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +97 -50
  33. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +3 -3
  34. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +195 -0
  35. package/themes/business/src/components/OrderDetailsLogistic/styles.tsx +5 -0
  36. package/themes/business/src/components/OrdersOption/index.tsx +63 -73
  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 +447 -247
  49. package/themes/business/src/components/PreviousOrders/styles.tsx +31 -3
  50. package/themes/business/src/components/ProductItemAccordion/index.tsx +30 -5
  51. package/themes/business/src/components/ReviewCustomer/index.tsx +39 -15
  52. package/themes/business/src/components/shared/ODropDown.tsx +42 -8
  53. package/themes/business/src/components/shared/ODropDownCalendar.tsx +36 -7
  54. package/themes/business/src/components/shared/OLink.tsx +33 -13
  55. package/themes/business/src/components/shared/OModal.tsx +16 -9
  56. package/themes/business/src/components/shared/OText.tsx +8 -2
  57. package/themes/business/src/types/index.tsx +36 -3
  58. package/themes/business/src/utils/index.tsx +53 -0
  59. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  60. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  61. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  62. package/themes/kiosk/src/components/BusinessesListing/index.tsx +2 -1
  63. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  64. package/themes/kiosk/src/components/LoginForm/Otp/index.tsx +92 -0
  65. package/themes/kiosk/src/components/LoginForm/Otp/styles.tsx +7 -0
  66. package/themes/kiosk/src/components/LoginForm/index.tsx +473 -151
  67. package/themes/kiosk/src/components/LoginForm/styles.tsx +14 -1
  68. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  69. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  70. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  71. package/themes/kiosk/src/components/PhoneInputNumber/index.tsx +1 -0
  72. package/themes/kiosk/src/components/PhoneInputNumber/styles.tsx +1 -3
  73. package/themes/kiosk/src/components/ProductForm/index.tsx +1 -14
  74. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  75. package/themes/kiosk/src/components/shared/OModal.tsx +14 -11
  76. package/themes/kiosk/src/layouts/Container.tsx +7 -1
  77. package/themes/kiosk/src/types/index.d.ts +13 -0
  78. package/themes/kiosk/src/utils/index.tsx +15 -0
  79. package/themes/original/index.tsx +8 -0
  80. package/themes/original/src/components/AddressDetails/index.tsx +10 -8
  81. package/themes/original/src/components/AddressForm/index.tsx +155 -139
  82. package/themes/original/src/components/AddressList/index.tsx +18 -18
  83. package/themes/original/src/components/AddressList/styles.tsx +4 -2
  84. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  85. package/themes/original/src/components/BusinessBasicInformation/index.tsx +118 -76
  86. package/themes/original/src/components/BusinessController/index.tsx +101 -70
  87. package/themes/original/src/components/BusinessController/styles.tsx +14 -9
  88. package/themes/original/src/components/BusinessInformation/index.tsx +10 -31
  89. package/themes/original/src/components/BusinessItemAccordion/index.tsx +12 -6
  90. package/themes/original/src/components/BusinessListingSearch/BusinessControllerSkeletons/index.tsx +57 -0
  91. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +59 -0
  92. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/styles.tsx +13 -0
  93. package/themes/original/src/components/BusinessListingSearch/index.tsx +102 -155
  94. package/themes/original/src/components/BusinessListingSearch/styles.tsx +10 -12
  95. package/themes/original/src/components/BusinessProductsList/index.tsx +11 -8
  96. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  97. package/themes/original/src/components/BusinessProductsListing/index.tsx +564 -495
  98. package/themes/original/src/components/BusinessProductsListing/styles.tsx +13 -12
  99. package/themes/original/src/components/BusinessTypeFilter/index.tsx +3 -2
  100. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  101. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +116 -81
  102. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -9
  103. package/themes/original/src/components/BusinessesListing/index.tsx +6 -6
  104. package/themes/original/src/components/Cart/index.tsx +75 -41
  105. package/themes/original/src/components/CartContent/index.tsx +80 -18
  106. package/themes/original/src/components/CartContent/styles.tsx +11 -1
  107. package/themes/original/src/components/Checkout/index.tsx +91 -96
  108. package/themes/original/src/components/Checkout/styles.tsx +4 -2
  109. package/themes/original/src/components/CitiesControl/index.tsx +89 -0
  110. package/themes/original/src/components/CitiesControl/styles.tsx +17 -0
  111. package/themes/original/src/components/DriverTips/index.tsx +52 -37
  112. package/themes/original/src/components/DriverTips/styles.tsx +2 -1
  113. package/themes/original/src/components/Favorite/index.tsx +7 -4
  114. package/themes/original/src/components/Favorite/styles.tsx +1 -1
  115. package/themes/original/src/components/FavoriteList/index.tsx +70 -80
  116. package/themes/original/src/components/FloatingButton/index.tsx +1 -2
  117. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  118. package/themes/original/src/components/GPSButton/index.tsx +20 -19
  119. package/themes/original/src/components/GPSButton/styles.ts +3 -3
  120. package/themes/original/src/components/GoogleMap/index.tsx +10 -1
  121. package/themes/original/src/components/Help/index.tsx +8 -8
  122. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +14 -20
  123. package/themes/original/src/components/HelpAccountAndPayment/styles.tsx +6 -0
  124. package/themes/original/src/components/HelpGuide/index.tsx +13 -12
  125. package/themes/original/src/components/HelpGuide/styles.tsx +6 -0
  126. package/themes/original/src/components/HelpOrder/index.tsx +12 -20
  127. package/themes/original/src/components/HelpOrder/styles.tsx +8 -1
  128. package/themes/original/src/components/LanguageSelector/index.tsx +19 -14
  129. package/themes/original/src/components/LastOrder/index.tsx +1 -34
  130. package/themes/original/src/components/LoginForm/Otp/index.tsx +89 -73
  131. package/themes/original/src/components/LoginForm/Otp/styles.tsx +0 -1
  132. package/themes/original/src/components/LoginForm/index.tsx +28 -8
  133. package/themes/original/src/components/LottieAnimation/index.tsx +78 -0
  134. package/themes/original/src/components/MessageListing/index.tsx +7 -40
  135. package/themes/original/src/components/Messages/index.tsx +42 -26
  136. package/themes/original/src/components/MomentOption/index.tsx +195 -88
  137. package/themes/original/src/components/MultiCart/index.tsx +50 -0
  138. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +92 -93
  139. package/themes/original/src/components/MultiCheckout/index.tsx +153 -77
  140. package/themes/original/src/components/MultiOrdersDetails/SingleOrderCard.tsx +37 -224
  141. package/themes/original/src/components/MultiOrdersDetails/index.tsx +85 -34
  142. package/themes/original/src/components/MultiOrdersDetails/styles.tsx +1 -1
  143. package/themes/original/src/components/MyOrders/index.tsx +66 -17
  144. package/themes/original/src/components/NavBar/index.tsx +7 -6
  145. package/themes/original/src/components/NetworkError/index.tsx +5 -3
  146. package/themes/original/src/components/NotFoundSource/index.tsx +2 -1
  147. package/themes/original/src/components/Notifications/index.tsx +144 -0
  148. package/themes/original/src/components/Notifications/styles.tsx +20 -0
  149. package/themes/original/src/components/OrderDetails/index.tsx +108 -218
  150. package/themes/original/src/components/OrderDetails/styles.tsx +10 -1
  151. package/themes/original/src/components/OrderItAgain/index.tsx +46 -43
  152. package/themes/original/src/components/OrderProgress/index.tsx +81 -105
  153. package/themes/original/src/components/OrderProgress/styles.tsx +5 -0
  154. package/themes/original/src/components/OrderSummary/index.tsx +2 -2
  155. package/themes/original/src/components/OrderTypeSelector/index.tsx +13 -6
  156. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/index.tsx +93 -97
  157. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/index.tsx +3 -0
  158. package/themes/original/src/components/OrdersOption/index.tsx +86 -92
  159. package/themes/original/src/components/PageBanner/index.tsx +146 -0
  160. package/themes/original/src/components/PageBanner/styles.tsx +11 -0
  161. package/themes/original/src/components/PaymentOptionStripe/styles.tsx +1 -1
  162. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  163. package/themes/original/src/components/PaymentOptions/index.tsx +1 -1
  164. package/themes/original/src/components/PhoneInputNumber/index.tsx +1 -1
  165. package/themes/original/src/components/PlaceSpot/index.tsx +16 -6
  166. package/themes/original/src/components/PreviousOrders/index.tsx +3 -2
  167. package/themes/original/src/components/ProductForm/index.tsx +240 -256
  168. package/themes/original/src/components/ProductForm/styles.tsx +5 -8
  169. package/themes/original/src/components/ProductItemAccordion/index.tsx +199 -128
  170. package/themes/original/src/components/ProductOptionSubOption/index.tsx +18 -10
  171. package/themes/original/src/components/ProductOptionSubOption/styles.tsx +1 -2
  172. package/themes/original/src/components/ProfessionalFilter/SingleProfessionalCard/index.tsx +108 -0
  173. package/themes/original/src/components/ProfessionalFilter/index.tsx +20 -49
  174. package/themes/original/src/components/ProfessionalProfile/index.tsx +54 -14
  175. package/themes/original/src/components/Promotions/index.tsx +234 -220
  176. package/themes/original/src/components/Promotions/styles.tsx +7 -2
  177. package/themes/original/src/components/ReviewDriver/index.tsx +3 -3
  178. package/themes/original/src/components/ReviewOrder/index.tsx +43 -11
  179. package/themes/original/src/components/ReviewOrder/styles.tsx +7 -0
  180. package/themes/original/src/components/ReviewProducts/index.tsx +8 -5
  181. package/themes/original/src/components/ReviewTrigger/index.tsx +27 -9
  182. package/themes/original/src/components/ReviewTrigger/styles.tsx +8 -1
  183. package/themes/original/src/components/ScheduleAccordion/index.tsx +68 -0
  184. package/themes/original/src/components/ScheduleAccordion/styles.tsx +14 -0
  185. package/themes/original/src/components/ServiceForm/index.tsx +377 -270
  186. package/themes/original/src/components/Sessions/index.tsx +11 -8
  187. package/themes/original/src/components/Sessions/styles.tsx +5 -0
  188. package/themes/original/src/components/SignupForm/index.tsx +78 -66
  189. package/themes/original/src/components/SingleOrderCard/index.tsx +125 -56
  190. package/themes/original/src/components/SingleOrderCard/styles.tsx +10 -8
  191. package/themes/original/src/components/SingleProductCard/index.tsx +112 -77
  192. package/themes/original/src/components/SingleProductCard/styles.tsx +14 -13
  193. package/themes/original/src/components/SingleProductReview/index.tsx +38 -5
  194. package/themes/original/src/components/SingleProductReview/styles.tsx +12 -0
  195. package/themes/original/src/components/StripeCardsList/index.tsx +1 -1
  196. package/themes/original/src/components/StripeElementsForm/index.tsx +4 -1
  197. package/themes/original/src/components/UpsellingProducts/index.tsx +244 -215
  198. package/themes/original/src/components/UpsellingProducts/styles.tsx +12 -1
  199. package/themes/original/src/components/UserDetails/index.tsx +5 -3
  200. package/themes/original/src/components/UserFormDetails/index.tsx +50 -54
  201. package/themes/original/src/components/UserProfile/index.tsx +58 -35
  202. package/themes/original/src/components/UserProfile/styles.ts +17 -0
  203. package/themes/original/src/components/UserProfileForm/index.tsx +21 -28
  204. package/themes/original/src/components/UserProfileForm/styles.tsx +7 -0
  205. package/themes/original/src/components/WalletTransactions/index.tsx +76 -0
  206. package/themes/original/src/components/WalletTransactions/styles.tsx +13 -0
  207. package/themes/original/src/components/Wallets/index.tsx +177 -164
  208. package/themes/original/src/components/Wallets/styles.tsx +12 -8
  209. package/themes/original/src/components/shared/CardAnimation.tsx +47 -0
  210. package/themes/original/src/components/shared/HeaderTitle.tsx +8 -3
  211. package/themes/original/src/components/shared/OBottomPopup.tsx +1 -1
  212. package/themes/original/src/components/shared/OButton.tsx +9 -4
  213. package/themes/original/src/components/shared/OIcon.tsx +8 -1
  214. package/themes/original/src/components/shared/OInput.tsx +10 -1
  215. package/themes/original/src/layouts/Container.tsx +13 -9
  216. package/themes/original/src/types/index.tsx +42 -7
  217. package/themes/original/src/utils/index.tsx +322 -58
  218. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,16 +1,19 @@
1
1
  import React, { useEffect, useState } from 'react'
2
+ import Clipboard from '@react-native-clipboard/clipboard';
2
3
  import { Messages as MessagesController, useSession, useUtils, useLanguage, ToastType, useToast } from 'ordering-components/native'
3
4
  import { useTheme } from 'styled-components/native';
4
5
  import { launchImageLibrary } from 'react-native-image-picker'
5
6
  import { GiftedChat, Actions, ActionsProps, InputToolbar, Composer, Send, Bubble, MessageImage, InputToolbarProps, ComposerProps } from 'react-native-gifted-chat'
6
7
  import { USER_TYPE } from '../../config/constants'
7
8
  import MaterialCommunityIcon from 'react-native-vector-icons/MaterialCommunityIcons'
9
+ import AntDesignIcon from 'react-native-vector-icons/AntDesign'
8
10
  import { OIcon, OIconButton, OText, OButton } from '../shared'
9
11
  import { TouchableOpacity, ActivityIndicator, StyleSheet, View, Platform, Keyboard } from 'react-native'
10
12
  import { Header, TitleHeader, Wrapper, QuickMessageContainer, ProfileMessageHeader, MessageTypeItem } from './styles'
11
13
  import { MessagesParams } from '../../types'
12
14
  import { useWindowDimensions } from 'react-native'
13
15
  import { useSafeAreaInsets } from 'react-native-safe-area-context'
16
+ import { getLogisticTag } from '../../utils'
14
17
 
15
18
  const ORDER_STATUS: any = {
16
19
  0: 'ORDER_STATUS_PENDING',
@@ -36,7 +39,7 @@ const ORDER_STATUS: any = {
36
39
  20: 'ORDER_CUSTOMER_ALMOST_ARRIVED_BUSINESS',
37
40
  21: 'ORDER_CUSTOMER_ARRIVED_BUSINESS',
38
41
  22: 'ORDER_LOOKING_FOR_DRIVER',
39
- 23: 'ORDER_DRIVER_ON_WAY'
42
+ 23: 'ORDER_DRIVER_ON_WAY'
40
43
  }
41
44
 
42
45
  const filterSpecialStatus = ['prepared_in', 'delivered_in', 'delivery_datetime']
@@ -122,18 +125,17 @@ const MessagesUI = (props: MessagesParams) => {
122
125
 
123
126
  const messageConsole = (message: any) => {
124
127
  return message.change?.attribute !== 'driver_id'
125
- ?
126
- `${t('ORDER', 'Order')} ${t(message.change.attribute.toUpperCase(), message.change.attribute.replace('_', ' '))} ${t('CHANGED_FROM', 'Changed from')} ${
127
- filterSpecialStatus.includes(message.change.attribute) ?
128
- `${message.change.old === null ? '0' : message.change.old} ${t('TO', 'to')} ${message.change.new} ${t('MINUTES', 'Minutes')}` :
129
- `${message.change.old !== null && t(ORDER_STATUS[parseInt(message.change.old, 10)])} ${t('TO', 'to')} ${t(ORDER_STATUS[parseInt(message.change.new, 10)])}`
130
- }`
131
- : message.change.new
132
128
  ?
133
- `${message.driver?.name} ${message.driver?.lastname !== null ? message.driver.lastname : ''} ${t('WAS_ASSIGNED_AS_DRIVER', 'Was assigned as driver')} ${message.comment ? message.comment.length : ''}`
134
- :
135
- `${t('DRIVER_UNASSIGNED', 'Driver unassigned')}`
136
- }
129
+ `${t('ORDER', 'Order')} ${t(message.change.attribute.toUpperCase(), message.change.attribute.replace('_', ' '))} ${t('CHANGED_FROM', 'Changed from')} ${filterSpecialStatus.includes(message.change.attribute) ?
130
+ `${message.change.old === null ? '0' : message.change.old} ${t('TO', 'to')} ${message.change.new} ${t('MINUTES', 'Minutes')}` :
131
+ `${message.change?.attribute !== 'logistic_status' ? message.change.old !== null && t(ORDER_STATUS[parseInt(message.change.old, 10)]) : message.change.old !== null && getLogisticTag(message.change.old)} ${t('TO', 'to')} ${message.change?.attribute !== 'logistic_status' ? t(ORDER_STATUS[parseInt(message.change.new, 10)]) : getLogisticTag(message.change.new)}`
132
+ }`
133
+ : message.change.new
134
+ ?
135
+ `${message.driver?.name} ${message.driver?.lastname !== null ? message.driver.lastname : ''} ${t('WAS_ASSIGNED_AS_DRIVER', 'Was assigned as driver')} ${message.comment ? message.comment.length : ''}`
136
+ :
137
+ `${t('DRIVER_UNASSIGNED', 'Driver unassigned')}`
138
+ }
137
139
 
138
140
  useEffect(() => {
139
141
  let newMessages: Array<any> = []
@@ -141,7 +143,7 @@ const MessagesUI = (props: MessagesParams) => {
141
143
  const firstMessage = {
142
144
  _id: 0,
143
145
  text: _console,
144
- createdAt: order?.created_at,
146
+ createdAt: parseDate(order?.created_at, { outputFormat: 'YYYY-MM-DD HH:mm:ss' }),
145
147
  system: true
146
148
  }
147
149
  const newMessage: any = [];
@@ -150,13 +152,13 @@ const MessagesUI = (props: MessagesParams) => {
150
152
  newMessage.push({
151
153
  _id: message?.id,
152
154
  text: message.type === 1 ? messageConsole(message) : message.comment,
153
- createdAt: message.type !== 0 && message.created_at,
155
+ createdAt: message.type !== 0 && parseDate(message?.created_at, { outputFormat: 'YYYY-MM-DD HH:mm:ss' }),
154
156
  image: message.source,
155
157
  system: message.type === 1,
156
158
  user: {
157
- _id: message.author.id,
158
- name: message.author.name,
159
- avatar: message.author.id !== user.id && type === USER_TYPE.DRIVER ? order?.driver?.photo : order?.business?.logo
159
+ _id: message.author && message.author.id,
160
+ name: message.author && message.author.name,
161
+ avatar: message.author && (message.author.id !== user.id && type === USER_TYPE.DRIVER ? order?.driver?.photo : order?.business?.logo)
160
162
  }
161
163
  });
162
164
  }
@@ -165,13 +167,13 @@ const MessagesUI = (props: MessagesParams) => {
165
167
  newMessage.push({
166
168
  _id: message?.id,
167
169
  text: message.type === 1 ? messageConsole(message) : message.comment,
168
- createdAt: message.type !== 0 && message.created_at,
170
+ createdAt: message.type !== 0 && parseDate(message?.created_at, { outputFormat: 'YYYY-MM-DD HH:mm:ss' }),
169
171
  image: message.source,
170
172
  system: message.type === 1,
171
173
  user: {
172
- _id: message.author.id,
173
- name: message.author.name,
174
- avatar: message.author.id !== user.id && type === USER_TYPE.DRIVER ? order?.driver?.photo : order?.business?.logo
174
+ _id: message.author && message.author.id ,
175
+ name: message.author && message.author.name,
176
+ avatar: message.author && (message.author.id !== user.id && type === USER_TYPE.DRIVER ? order?.driver?.photo : order?.business?.logo)
175
177
  }
176
178
  });
177
179
  }
@@ -397,12 +399,27 @@ const MessagesUI = (props: MessagesParams) => {
397
399
  }
398
400
  }
399
401
 
402
+ const onLongPress = (context: any, message: any) => {
403
+ const options = [
404
+ t('COPY_TEXT', 'Copy text'),
405
+ t('CANCEL', 'Cancel'),
406
+ ];
407
+ const cancelButtonIndex = options.length - 1;
408
+ context.actionSheet().showActionSheetWithOptions({
409
+ options,
410
+ cancelButtonIndex
411
+ }, (buttonIndex: any) => buttonIndex === 0 && Clipboard.setString(message.text)
412
+ );
413
+ }
414
+
400
415
  return (
401
416
  <View style={{ height: getViewHeight(), width: '100%', paddingTop: 12, backgroundColor: 'white' }}>
402
417
  <Wrapper>
403
418
  {!isMeesageListing ? (
404
419
  <Header>
405
- <OIconButton icon={theme.images.general.arrow_left} style={{ paddingStart: 10, borderColor: theme.colors.clear }} onClick={onClose} />
420
+ <TouchableOpacity onPress={onClose} style={{ paddingStart: 10, borderColor: theme.colors.clear }}>
421
+ <AntDesignIcon name='arrowleft' size={26} />
422
+ </TouchableOpacity>
406
423
  <View style={{ marginRight: 10, shadowColor: theme.colors.black, shadowOpacity: 0.1, shadowOffset: { width: 0, height: 1 }, shadowRadius: 2 }}>
407
424
  <OIcon
408
425
  url={type === USER_TYPE.DRIVER ? order?.driver?.photo : order?.business?.logo}
@@ -419,10 +436,8 @@ const MessagesUI = (props: MessagesParams) => {
419
436
  ) : (
420
437
  <ProfileMessageHeader>
421
438
  <View style={{ ...styles.headerTitle }}>
422
- <TouchableOpacity
423
- style={styles.headerItem}
424
- onPress={onClose}>
425
- <OIcon src={theme.images.general.arrow_left} width={16} />
439
+ <TouchableOpacity onPress={onClose} style={styles.headerItem}>
440
+ <AntDesignIcon name='arrowleft' size={26} />
426
441
  </TouchableOpacity>
427
442
  <OText size={18}>{t('ORDER', theme?.defaultLanguages?.ORDER || 'Order')} #{order?.id}</OText>
428
443
  </View>
@@ -473,6 +488,7 @@ const MessagesUI = (props: MessagesParams) => {
473
488
  onSend={onSubmit}
474
489
  onInputTextChanged={onChangeMessage}
475
490
  alignTop
491
+ onLongPress={(context: any, message: any) => onLongPress(context, message)}
476
492
  scrollToBottom
477
493
  renderAvatarOnTop
478
494
  renderUsernameOnMessage
@@ -13,7 +13,8 @@ import IconAntDesign from 'react-native-vector-icons/AntDesign'
13
13
  import {
14
14
  StyleSheet,
15
15
  View,
16
- TouchableOpacity
16
+ Platform,
17
+ Pressable
17
18
  } from 'react-native';
18
19
  import Spinner from 'react-native-loading-spinner-overlay';
19
20
  import { MomentOptionParams } from '../../types';
@@ -28,6 +29,7 @@ import {
28
29
  TimeItem
29
30
  } from './styles';
30
31
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
32
+ import { locale, monthsEnum } from '../../utils';
31
33
 
32
34
  const MomentOptionUI = (props: MomentOptionParams) => {
33
35
  const {
@@ -36,6 +38,14 @@ const MomentOptionUI = (props: MomentOptionParams) => {
36
38
  hoursList,
37
39
  dateSelected,
38
40
  timeSelected,
41
+ cateringPreorder,
42
+ isCart,
43
+ preorderLeadTime,
44
+ business,
45
+ getActualSchedule,
46
+ preorderMaximumDays,
47
+ preorderMinimumDays,
48
+ isPage,
39
49
  handleAsap,
40
50
  handleChangeDate,
41
51
  handleChangeTime,
@@ -149,8 +159,8 @@ const MomentOptionUI = (props: MomentOptionParams) => {
149
159
 
150
160
  const [selectedTime, setSelectedTime] = useState(null);
151
161
  const [datesWhitelist, setDateWhitelist] = useState<any>([{ start: null, end: null }])
152
- const [selectDate, setSelectedDate] = useState<any>(null)
153
-
162
+ const [selectDate, setSelectedDate] = useState<any>(dateSelected)
163
+ const [timeList, setTimeList] = useState<any>(hoursList)
154
164
  const goToBack = () => navigation?.canGoBack() && navigation.goBack();
155
165
 
156
166
  const _handleAsap = () => {
@@ -162,9 +172,9 @@ const MomentOptionUI = (props: MomentOptionParams) => {
162
172
  }
163
173
  };
164
174
 
165
- const handleChangeMoment = () => {
175
+ const handleChangeMoment = (time?: any) => {
166
176
  setMomentState({ isLoading: 1, isEditing: true });
167
- handleChangeTime(selectedTime);
177
+ handleChangeTime(time ?? selectedTime);
168
178
  };
169
179
 
170
180
  const momento = moment(
@@ -203,6 +213,14 @@ const MomentOptionUI = (props: MomentOptionParams) => {
203
213
  if (handleChangeDate) handleChangeDate(moment(val).format('YYYY-MM-DD'))
204
214
  }
205
215
 
216
+ const handleChangeTimeSelected = (time: any) => {
217
+ if (cateringPreorder) {
218
+ handleChangeMoment(time)
219
+ } else {
220
+ setSelectedTime(time)
221
+ }
222
+ }
223
+
206
224
  const LeftSelector = () => {
207
225
  return (
208
226
  <View style={{ height: '100%', justifyContent: 'flex-end' }}>
@@ -229,20 +247,25 @@ const MomentOptionUI = (props: MomentOptionParams) => {
229
247
 
230
248
  useEffect(() => {
231
249
  if (datesList?.length > 0) {
232
- const _datesList = datesList.slice(0, Number(configs?.max_days_preorder?.value || 6))
233
- const minDateParts = _datesList[0].split('-')
234
- const maxDateParts = _datesList[_datesList.length - 1].split('-')
235
- const _minDate = new Date(minDateParts[0], minDateParts[1] - 1, minDateParts[2])
236
- const _maxDate = new Date(maxDateParts[0], maxDateParts[1] - 1, maxDateParts[2])
237
- setDateWhitelist([{ start: _minDate, end: _maxDate }])
250
+ const _datesList = datesList.slice((cateringPreorder && preorderMinimumDays) || 0, Number(cateringPreorder ? preorderMaximumDays || configs?.max_days_preorder?.value : configs?.max_days_preorder?.value ?? 6))
251
+ if (_datesList?.length > 0) {
252
+ const minDateParts = _datesList?.[0]?.split('-')
253
+ const maxDateParts = _datesList[_datesList.length - 1].split('-')
254
+ const _minDate = new Date(minDateParts[0], minDateParts[1] - 1, minDateParts[2])
255
+ const _maxDate = new Date(maxDateParts[0], maxDateParts[1] - 1, maxDateParts[2])
256
+ setDateWhitelist([{ start: _minDate, end: _maxDate }])
257
+ }
238
258
  }
239
- }, [datesList])
259
+ }, [JSON.stringify(datesList), preorderMinimumDays, preorderMaximumDays, cateringPreorder])
240
260
 
241
261
  useEffect(() => {
242
262
  if (dateSelected) {
243
263
  const dateParts = dateSelected.split('-')
244
264
  const _dateSelected = new Date(dateParts[0], dateParts[1] - 1, dateParts[2])
245
265
  setSelectedDate(_dateSelected)
266
+ if (cateringPreorder) {
267
+ onSelectDate(_dateSelected)
268
+ }
246
269
  }
247
270
  }, [dateSelected])
248
271
 
@@ -250,39 +273,98 @@ const MomentOptionUI = (props: MomentOptionParams) => {
250
273
  setSelectedTime(timeSelected)
251
274
  }, [timeSelected])
252
275
 
276
+ useEffect(() => {
277
+ if (cateringPreorder) {
278
+ let _timeLists = []
279
+ const schedule = business && getActualSchedule()
280
+ if (!schedule && business) {
281
+ return
282
+ }
283
+ _timeLists = hoursList
284
+ .filter(hour => (!business || schedule?.lapses?.some((lapse: any) =>
285
+ moment(dateSelected + ` ${hour.startTime}`) >= moment(dateSelected + ` ${lapse.open.hour}:${lapse.open.minute}`).add(preorderLeadTime, 'minutes') && moment(dateSelected + ` ${hour.endTime}`) <= moment(dateSelected + ` ${lapse.close.hour}:${lapse.close.minute}`))) &&
286
+ moment(dateSelected + ` ${hour.startTime}`) < moment(dateSelected + ` ${hour.endTime}`) &&
287
+ (moment().add(preorderLeadTime, 'minutes') < moment(dateSelected + ` ${hour.startTime}`) || !cateringPreorder))
288
+ .map(hour => {
289
+ return {
290
+ value: hour.startTime,
291
+ text: is12hours ? (
292
+ hour.startTime.includes('12')
293
+ ? `${hour.startTime}PM`
294
+ : parseTime(moment(hour.startTime, 'HH:mm'), { outputFormat: 'hh:mma' })
295
+ ) : (
296
+ parseTime(moment(hour.startTime, 'HH:mm'), { outputFormat: 'HH:mm' })
297
+ ),
298
+ endText: is12hours ? (
299
+ hour.endTime.includes('12')
300
+ ? `${hour.endTime}PM`
301
+ : parseTime(moment(hour.endTime, 'HH:mm'), { outputFormat: 'hh:mma' })
302
+ ) : (
303
+ parseTime(moment(hour.endTime, 'HH:mm'), { outputFormat: 'HH:mm' })
304
+ )
305
+ }
306
+ })
307
+ if (_timeLists?.length > 0) {
308
+ setTimeList(_timeLists)
309
+ }
310
+ } else {
311
+ setTimeList(hoursList.map(hour => {
312
+ return {
313
+ value: hour.startTime,
314
+ text: is12hours ? (
315
+ hour.startTime.includes('12')
316
+ ? `${hour.startTime}PM`
317
+ : parseTime(moment(hour.startTime, 'HH:mm'), { outputFormat: 'hh:mma' })
318
+ ) : (
319
+ parseTime(moment(hour.startTime, 'HH:mm'), { outputFormat: 'HH:mm' })
320
+ )
321
+ }
322
+ }))
323
+ }
324
+ }, [dateSelected, JSON.stringify(hoursList), JSON.stringify(datesWhitelist), cateringPreorder, JSON.stringify(business)])
325
+
253
326
  return (
254
327
  <>
255
- <Container style={{ paddingLeft: 40, paddingRight: 40 }}>
256
- <View style={{ paddingBottom: 90 }}>
257
- <NavBar
258
- onActionLeft={() => goToBack()}
259
- btnStyle={{ paddingLeft: 0 }}
260
- paddingTop={0}
261
- style={{ paddingBottom: 0, flexDirection: 'column', alignItems: 'flex-start' }}
262
- title={t('QUESTION_WHEN_ORDER', 'When do you want your order?')}
263
- titleAlign={'center'}
264
- titleStyle={{ fontSize: 14, marginRight: 0, marginLeft: 0 }}
265
- titleWrapStyle={{ paddingHorizontal: 0 }}
266
- />
267
-
268
- <WrapSelectOption
269
- onPress={() => _handleAsap()}
270
- disabled={orderState.loading} style={{ alignItems: 'flex-start' }}>
271
- {optionSelected.isAsap ? (
272
- <OIcon
273
- src={theme.images.general.option_checked}
274
- width={16}
275
- style={{ marginEnd: 24 }}
276
- />
277
- ) : (
278
- <OIcon
279
- src={theme.images.general.option_normal}
280
- width={16}
281
- style={{ marginEnd: 24 }}
282
- />
283
- )}
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
- </WrapSelectOption>
328
+ <Container
329
+ style={{
330
+ paddingLeft: !cateringPreorder || isPage ? 40 : 0,
331
+ paddingRight: !cateringPreorder || isPage ? 40 : 0
332
+ }}
333
+ nestedScrollEnabled
334
+ >
335
+ <View style={{ paddingBottom: cateringPreorder ? 0 : 90, paddingRight: 20 }}>
336
+ {!isCart && (
337
+ <NavBar
338
+ onActionLeft={() => goToBack()}
339
+ btnStyle={{ paddingLeft: 0 }}
340
+ style={{ paddingBottom: 0 }}
341
+ paddingTop={Platform.OS === 'ios' ? 10 : 0}
342
+ title={t('QUESTION_WHEN_ORDER', 'When do you want your order?')}
343
+ titleAlign={'center'}
344
+ titleStyle={{ fontSize: 20, marginRight: 0, marginLeft: 0 }}
345
+ titleWrapStyle={{ paddingHorizontal: 0 }}
346
+ />
347
+ )}
348
+ {(preorderMinimumDays === 0 && preorderLeadTime === 0) || !cateringPreorder && (
349
+ <WrapSelectOption
350
+ onPress={() => _handleAsap()}
351
+ disabled={orderState.loading} style={{ alignItems: 'flex-start' }}>
352
+ {optionSelected.isAsap ? (
353
+ <OIcon
354
+ src={theme.images.general.option_checked}
355
+ width={16}
356
+ style={{ marginEnd: 24 }}
357
+ />
358
+ ) : (
359
+ <OIcon
360
+ src={theme.images.general.option_normal}
361
+ width={16}
362
+ style={{ marginEnd: 24 }}
363
+ />
364
+ )}
365
+ <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>
366
+ </WrapSelectOption>
367
+ )}
286
368
  <WrapSelectOption
287
369
  onPress={() => setOptionSelected({ isAsap: false, isSchedule: true })}
288
370
  disabled={orderState.loading}>
@@ -301,57 +383,80 @@ const MomentOptionUI = (props: MomentOptionParams) => {
301
383
  )}
302
384
  <OText color={optionSelected.isSchedule ? theme.colors.textNormal : theme.colors.disabled}>{t('SCHEDULE_FOR_LATER', 'Schedule for later')}</OText>
303
385
  </WrapSelectOption>
304
-
305
386
  {optionSelected.isSchedule && (
306
387
  <OrderTimeWrapper>
307
- <View style={{ flex: 1 }}>
308
- {selectDate && datesWhitelist[0]?.start !== null && (
309
- <CalendarStrip
310
- scrollable
311
- style={styles.calendar}
312
- calendarHeaderContainerStyle={styles.calendarHeaderContainer}
313
- calendarHeaderStyle={styles.calendarHeader}
314
- dateNumberStyle={styles.dateNumber}
315
- dateNameStyle={styles.dateName}
316
- iconContainer={{ flex: 0.1 }}
317
- highlightDateNameStyle={styles.highlightDateName}
318
- highlightDateNumberStyle={styles.highlightDateNumber}
319
- dayContainerStyle={{ height: '100%' }}
320
- highlightDateContainerStyle={{ height: '100%' }}
321
- calendarHeaderFormat='MMMM, YYYY'
322
- iconStyle={{ borderWidth: 1 }}
323
- selectedDate={selectDate}
324
- datesWhitelist={datesWhitelist}
325
- disabledDateNameStyle={styles.disabledDateName}
326
- disabledDateNumberStyle={styles.disabledDateNumber}
327
- disabledDateOpacity={0.6}
328
- onDateSelected={(date) => onSelectDate(date)}
329
- leftSelector={<LeftSelector />}
330
- rightSelector={<RightSelector />}
331
- />
332
- )}
333
- </View>
334
- <TimeListWrapper nestedScrollEnabled={true}>
388
+ {datesWhitelist[0]?.start === datesWhitelist[0]?.end && (
389
+ <OText>
390
+ {moment(selectDate).format('Do MMMM, YYYY')}
391
+ </OText>
392
+ )}
393
+ {datesWhitelist[0]?.start !== datesWhitelist[0]?.end && (
394
+ <View style={{ flex: 1 }}>
395
+ {selectDate && datesWhitelist[0]?.start !== null && (
396
+ <CalendarStrip
397
+ scrollable
398
+ style={styles.calendar}
399
+ calendarHeaderContainerStyle={styles.calendarHeaderContainer}
400
+ calendarHeaderStyle={styles.calendarHeader}
401
+ dateNumberStyle={styles.dateNumber}
402
+ dateNameStyle={styles.dateName}
403
+ iconContainer={{ flex: 0.1 }}
404
+ highlightDateNameStyle={styles.highlightDateName}
405
+ highlightDateNumberStyle={styles.highlightDateNumber}
406
+ dayContainerStyle={{ height: '100%' }}
407
+ highlightDateContainerStyle={{ height: '100%' }}
408
+ calendarHeaderFormat='MMMM, YYYY'
409
+ iconStyle={{ borderWidth: 1 }}
410
+ selectedDate={dateSelected}
411
+ datesWhitelist={datesWhitelist}
412
+ minDate={moment()}
413
+ maxDate={cateringPreorder ? moment().add(preorderMaximumDays, 'days') : undefined}
414
+ disabledDateNameStyle={styles.disabledDateName}
415
+ disabledDateNumberStyle={styles.disabledDateNumber}
416
+ disabledDateOpacity={0.6}
417
+ onDateSelected={(date) => onSelectDate(date)}
418
+ leftSelector={<LeftSelector />}
419
+ rightSelector={<RightSelector />}
420
+ />
421
+ )}
422
+ </View>
423
+ )}
424
+ <TimeListWrapper nestedScrollEnabled={true} cateringPreorder={cateringPreorder}>
335
425
  <TimeContentWrapper>
336
- {hoursList.map((time: any, i: number) => (
337
- <TouchableOpacity key={i} onPress={() => setSelectedTime(time.startTime)}>
338
- <TimeItem active={selectedTime === time.startTime}>
426
+ {timeList.map((time: any, i: number) => (
427
+ <Pressable key={i} onPress={() => handleChangeTimeSelected(time.value)}>
428
+ <TimeItem
429
+ active={selectedTime === time.value}
430
+ cateringPreorder={cateringPreorder}
431
+ >
432
+ {cateringPreorder && (
433
+ <>
434
+ {selectedTime === time.value ? (
435
+ <OIcon
436
+ src={theme.images.general.option_checked}
437
+ width={18}
438
+ style={{ marginEnd: 24, bottom: 2 }}
439
+ />
440
+ ) : (
441
+ <OIcon
442
+ src={theme.images.general.option_normal}
443
+ width={18}
444
+ style={{ marginEnd: 24, bottom: 2 }}
445
+ />
446
+ )}
447
+ </>
448
+ )}
339
449
  <OText
340
- size={14}
341
- color={selectedTime === time.startTime ? theme.colors.primary : theme.colors.textNormal}
450
+ size={cateringPreorder ? 18 : 16}
451
+ color={selectedTime === time.value ? theme.colors.primary : theme.colors.textNormal}
342
452
  style={{
343
453
  lineHeight: 24
344
454
  }}
345
- >{is12hours ? (
346
- time.startTime.includes('12')
347
- ? `${time.startTime}PM`
348
- : parseTime(moment(time.startTime, 'HH:mm'), { outputFormat: 'hh:mma' })
349
- ) : time.startTime
350
- }</OText>
455
+ >{time.text} {cateringPreorder && `- ${time.endText}`}</OText>
351
456
  </TimeItem>
352
- </TouchableOpacity>
457
+ </Pressable>
353
458
  ))}
354
- {hoursList.length % 3 === 2 && (
459
+ {timeList.length % 3 === 2 && (
355
460
  <TimeItem style={{ backgroundColor: 'transparent' }} />
356
461
  )}
357
462
  </TimeContentWrapper>
@@ -361,9 +466,11 @@ const MomentOptionUI = (props: MomentOptionParams) => {
361
466
  </View>
362
467
  <Spinner visible={momentState.isLoading === 1} />
363
468
  </Container>
364
- <View style={{ position: 'absolute', bottom: bottom, paddingBottom: 20, paddingHorizontal: 40, backgroundColor: 'white', width: '100%' }}>
365
- <OButton onClick={handleChangeMoment} isDisabled={!selectedTime} text={t('CONTINUE', 'Continue')} style={{ borderRadius: 7.6, height: 44, shadowOpacity: 0 }} textStyle={{ color: 'white', fontSize: 14 }} showNextIcon />
366
- </View>
469
+ {!isCart && !cateringPreorder && (
470
+ <View style={{ position: 'absolute', bottom: bottom, paddingBottom: 20, paddingHorizontal: 40, backgroundColor: 'white', width: '100%' }}>
471
+ <OButton onClick={() => handleChangeMoment()} isDisabled={!selectedTime} text={t('CONTINUE', 'Continue')} style={{ borderRadius: 7.6, height: 44, shadowOpacity: 0 }} textStyle={{ color: 'white', fontSize: 14 }} showNextIcon />
472
+ </View>
473
+ )}
367
474
  </>
368
475
  );
369
476
  };
@@ -0,0 +1,50 @@
1
+ import React from 'react'
2
+ import { View } from 'react-native'
3
+ import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder'
4
+ import { useTheme } from 'styled-components/native';
5
+ import { MultiCartCreate } from 'ordering-components/native'
6
+
7
+ import { Container } from '../../layouts/Container';
8
+ import { ChContainer, ChSection, ChUserDetails } from '../Checkout/styles'
9
+
10
+ export const MultiCartUI = () => {
11
+ const theme = useTheme();
12
+ return (
13
+ <Container noPadding>
14
+ <ChContainer style={{ paddingHorizontal: 40 }}>
15
+ <ChSection>
16
+ <ChUserDetails>
17
+ <Placeholder Animation={Fade}>
18
+ <PlaceholderLine height={20} />
19
+ <PlaceholderLine height={20} />
20
+ <PlaceholderLine height={20} />
21
+ <PlaceholderLine height={20} style={{ marginBottom: 20 }} />
22
+ </Placeholder>
23
+ <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginHorizontal: -40, marginBottom: 20 }} />
24
+ <Placeholder Animation={Fade}>
25
+ <PlaceholderLine height={20} />
26
+ <PlaceholderLine height={20} />
27
+ <PlaceholderLine height={20} />
28
+ <PlaceholderLine height={20} style={{ marginBottom: 20 }} />
29
+ </Placeholder>
30
+ <View style={{ height: 8, backgroundColor: theme.colors.backgroundGray100, marginHorizontal: -40, marginBottom: 20 }} />
31
+ <Placeholder Animation={Fade}>
32
+ <PlaceholderLine height={20} />
33
+ <PlaceholderLine height={120} style={{ marginBottom: 20, borderRadius: 8 }} />
34
+ <PlaceholderLine height={20} />
35
+ <PlaceholderLine height={20} />
36
+ </Placeholder>
37
+ </ChUserDetails>
38
+ </ChSection>
39
+ </ChContainer>
40
+ </Container>
41
+ )
42
+ }
43
+
44
+ export const MultiCart = (props: any) => {
45
+ const mulcartProps = {
46
+ ...props,
47
+ UIComponent: MultiCartUI
48
+ }
49
+ return <MultiCartCreate {...mulcartProps} />
50
+ }