ordering-ui-react-native 0.22.1 → 0.22.2-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 (161) hide show
  1. package/package.json +6 -7
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessesListing/index.tsx +1 -1
  4. package/src/components/StripeMethodForm/index.tsx +4 -2
  5. package/src/components/VerifyPhone/styles.tsx +1 -2
  6. package/src/context/OfflineActions/index.tsx +236 -0
  7. package/src/types/index.tsx +2 -1
  8. package/themes/business/index.tsx +2 -0
  9. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +9 -6
  10. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
  11. package/themes/business/src/components/BusinessController/index.tsx +8 -3
  12. package/themes/business/src/components/BusinessProductList/index.tsx +2 -1
  13. package/themes/business/src/components/Chat/index.tsx +15 -3
  14. package/themes/business/src/components/DriverMap/index.tsx +49 -27
  15. package/themes/business/src/components/FloatingButton/index.tsx +3 -2
  16. package/themes/business/src/components/GoogleMap/index.tsx +15 -8
  17. package/themes/business/src/components/LanguageSelector/index.tsx +2 -3
  18. package/themes/business/src/components/LanguageSelector/lang_country.json +515 -70
  19. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  20. package/themes/business/src/components/MapView/index.tsx +36 -17
  21. package/themes/business/src/components/NewOrderNotification/index.tsx +40 -27
  22. package/themes/business/src/components/OrderDetails/Business.tsx +54 -37
  23. package/themes/business/src/components/OrderDetails/Delivery.tsx +138 -55
  24. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +125 -43
  25. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +62 -24
  26. package/themes/business/src/components/OrderDetails/styles.tsx +39 -3
  27. package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +149 -68
  28. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +3 -2
  29. package/themes/business/src/components/OrderSummary/index.tsx +210 -65
  30. package/themes/business/src/components/OrdersListManager/index.tsx +13 -1
  31. package/themes/business/src/components/OrdersOption/index.tsx +217 -156
  32. package/themes/business/src/components/PhoneInputNumber/index.tsx +8 -5
  33. package/themes/business/src/components/PreviousMessages/index.tsx +26 -3
  34. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +39 -16
  35. package/themes/business/src/components/PreviousOrders/index.tsx +76 -66
  36. package/themes/business/src/components/PrinterEdition/MessageAlert.tsx +33 -0
  37. package/themes/business/src/components/PrinterEdition/index.tsx +431 -0
  38. package/themes/business/src/components/PrinterEdition/printerList.tsx +23 -0
  39. package/themes/business/src/components/PrinterEdition/styles.tsx +61 -0
  40. package/themes/business/src/components/PrinterSettings/index.tsx +226 -76
  41. package/themes/business/src/components/PrinterSettings/styles.tsx +20 -0
  42. package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
  43. package/themes/business/src/components/StoresList/index.tsx +2 -2
  44. package/themes/business/src/components/UserProfileForm/index.tsx +16 -17
  45. package/themes/business/src/components/WebsocketStatus/index.tsx +2 -2
  46. package/themes/business/src/components/shared/OTextarea.tsx +8 -9
  47. package/themes/business/src/layouts/SafeAreaContainer.tsx +35 -19
  48. package/themes/business/src/types/index.tsx +14 -5
  49. package/themes/business/src/utils/index.tsx +25 -1
  50. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  51. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  52. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  53. package/themes/kiosk/src/components/Checkout/index.tsx +6 -0
  54. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  55. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  56. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  57. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  58. package/themes/original/index.tsx +11 -0
  59. package/themes/original/src/components/AddressForm/index.tsx +32 -17
  60. package/themes/original/src/components/AddressList/index.tsx +8 -7
  61. package/themes/original/src/components/AnalyticsSegment/index.tsx +6 -6
  62. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  63. package/themes/original/src/components/BusinessBasicInformation/index.tsx +5 -8
  64. package/themes/original/src/components/BusinessController/index.tsx +5 -5
  65. package/themes/original/src/components/BusinessItemAccordion/index.tsx +13 -5
  66. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +2 -3
  67. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +1 -3
  68. package/themes/original/src/components/BusinessListingSearch/index.tsx +1 -2
  69. package/themes/original/src/components/BusinessPreorder/index.tsx +44 -32
  70. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +73 -70
  71. package/themes/original/src/components/BusinessProductsList/index.tsx +6 -7
  72. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  73. package/themes/original/src/components/BusinessProductsListing/index.tsx +18 -6
  74. package/themes/original/src/components/BusinessTypeFilter/index.tsx +9 -8
  75. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  76. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +1 -1
  77. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
  78. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  79. package/themes/original/src/components/Cart/index.tsx +38 -14
  80. package/themes/original/src/components/CartContent/index.tsx +2 -4
  81. package/themes/original/src/components/Checkout/index.tsx +110 -58
  82. package/themes/original/src/components/CitiesControl/index.tsx +0 -3
  83. package/themes/original/src/components/CouponControl/index.tsx +1 -3
  84. package/themes/original/src/components/DriverTips/index.tsx +1 -3
  85. package/themes/original/src/components/Favorite/index.tsx +1 -5
  86. package/themes/original/src/components/FavoriteList/index.tsx +0 -1
  87. package/themes/original/src/components/ForgotPasswordForm/index.tsx +5 -7
  88. package/themes/original/src/components/GiftCard/GiftCardUI/index.tsx +15 -17
  89. package/themes/original/src/components/GiftCard/PurchaseGiftCard/index.tsx +3 -7
  90. package/themes/original/src/components/GiftCard/RedeemGiftCard/index.tsx +24 -32
  91. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +7 -9
  92. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +11 -12
  93. package/themes/original/src/components/GoogleMap/index.tsx +39 -18
  94. package/themes/original/src/components/Help/index.tsx +2 -0
  95. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
  96. package/themes/original/src/components/Home/index.tsx +3 -11
  97. package/themes/original/src/components/LoginForm/Otp/index.tsx +0 -3
  98. package/themes/original/src/components/LoginForm/index.tsx +4 -7
  99. package/themes/original/src/components/MessageListing/index.tsx +2 -1
  100. package/themes/original/src/components/Messages/index.tsx +29 -17
  101. package/themes/original/src/components/MomentOption/TimeListItem.tsx +56 -0
  102. package/themes/original/src/components/MomentOption/index.tsx +79 -56
  103. package/themes/original/src/components/MomentSelector/index.tsx +1 -1
  104. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +7 -3
  105. package/themes/original/src/components/MultiCheckout/index.tsx +55 -27
  106. package/themes/original/src/components/MultiOrdersDetails/index.tsx +1 -0
  107. package/themes/original/src/components/MyOrders/index.tsx +2 -2
  108. package/themes/original/src/components/NavBar/index.tsx +7 -4
  109. package/themes/original/src/components/NetworkError/index.tsx +0 -5
  110. package/themes/original/src/components/NotFoundSource/index.tsx +0 -3
  111. package/themes/original/src/components/OrderDetails/OrderEta.tsx +4 -3
  112. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +13 -10
  113. package/themes/original/src/components/OrderDetails/index.tsx +44 -21
  114. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  115. package/themes/original/src/components/OrderProgress/index.tsx +5 -4
  116. package/themes/original/src/components/OrderSummary/index.tsx +29 -10
  117. package/themes/original/src/components/OrderTypeSelector/index.tsx +7 -6
  118. package/themes/original/src/components/OrdersOption/index.tsx +3 -6
  119. package/themes/original/src/components/PaymentOptionStripe/index.tsx +0 -5
  120. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  121. package/themes/original/src/components/PaymentOptions/index.tsx +10 -8
  122. package/themes/original/src/components/PlaceSpot/index.tsx +1 -3
  123. package/themes/original/src/components/PreviousOrders/index.tsx +1 -2
  124. package/themes/original/src/components/ProductForm/ActionButton.tsx +17 -20
  125. package/themes/original/src/components/ProductForm/index.tsx +107 -102
  126. package/themes/original/src/components/ProductItemAccordion/index.tsx +51 -44
  127. package/themes/original/src/components/ProductItemAccordion/styles.tsx +3 -4
  128. package/themes/original/src/components/ProductOptionSubOption/index.tsx +16 -8
  129. package/themes/original/src/components/ProfessionalProfile/index.tsx +4 -5
  130. package/themes/original/src/components/Promotions/index.tsx +6 -9
  131. package/themes/original/src/components/ReviewDriver/index.tsx +1 -1
  132. package/themes/original/src/components/ReviewOrder/index.tsx +2 -2
  133. package/themes/original/src/components/ReviewProducts/index.tsx +1 -1
  134. package/themes/original/src/components/ReviewTrigger/index.tsx +2 -2
  135. package/themes/original/src/components/ServiceForm/index.tsx +52 -54
  136. package/themes/original/src/components/Sessions/index.tsx +3 -3
  137. package/themes/original/src/components/SignupForm/index.tsx +86 -78
  138. package/themes/original/src/components/SingleOrderCard/index.tsx +6 -4
  139. package/themes/original/src/components/SingleProductCard/index.tsx +3 -4
  140. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  141. package/themes/original/src/components/StripeCardForm/index.tsx +0 -3
  142. package/themes/original/src/components/StripeCardsList/index.tsx +10 -3
  143. package/themes/original/src/components/StripeElementsForm/index.tsx +76 -62
  144. package/themes/original/src/components/StripeElementsForm/naked.tsx +48 -1
  145. package/themes/original/src/components/StripeRedirectForm/index.tsx +0 -3
  146. package/themes/original/src/components/TaxInformation/index.tsx +3 -2
  147. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +10 -7
  148. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +8 -3
  149. package/themes/original/src/components/UserDetails/index.tsx +17 -16
  150. package/themes/original/src/components/UserFormDetails/index.tsx +159 -133
  151. package/themes/original/src/components/UserProfile/index.tsx +9 -1
  152. package/themes/original/src/components/UserVerification/index.tsx +14 -4
  153. package/themes/original/src/components/Wallets/index.tsx +6 -3
  154. package/themes/original/src/components/WebsocketStatus/index.tsx +1 -4
  155. package/themes/original/src/components/shared/OAlert.tsx +2 -1
  156. package/themes/original/src/components/shared/OButton.tsx +5 -4
  157. package/themes/original/src/components/shared/OInput.tsx +4 -8
  158. package/themes/original/src/components/shared/OModal.tsx +7 -2
  159. package/themes/original/src/types/index.tsx +5 -1
  160. package/themes/original/src/utils/index.tsx +30 -1
  161. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,5 +1,5 @@
1
1
  import React, { useEffect, useState, useRef } from 'react';
2
- import { StyleSheet, View, Keyboard, Modal } from 'react-native';
2
+ import { StyleSheet, View, Keyboard, Modal, Platform } from 'react-native';
3
3
  import Spinner from 'react-native-loading-spinner-overlay';
4
4
  import { useForm, Controller } from 'react-hook-form';
5
5
  import { PhoneInputNumber } from '../PhoneInputNumber';
@@ -108,7 +108,7 @@ const LoginFormUI = (props: LoginParams) => {
108
108
 
109
109
  const googleLoginEnabled = configs?.google_login_enabled?.value === '1' || !configs?.google_login_enabled?.enabled
110
110
  const facebookLoginEnabled = configs?.facebook_login_enabled?.value === '1' || !configs?.facebook_login_enabled?.enabled
111
- const appleLoginEnabled = configs?.apple_login_enabled?.value === '1' || !configs?.apple_login_enabled?.enabled
111
+ const appleLoginEnabled = Platform.OS === 'ios' && (configs?.apple_login_enabled?.value === '1' || !configs?.apple_login_enabled?.enabled)
112
112
 
113
113
  const loginStyle = StyleSheet.create({
114
114
  btnOutline: {
@@ -630,6 +630,7 @@ const LoginFormUI = (props: LoginParams) => {
630
630
  />
631
631
  )
632
632
  }
633
+ autoCapitalize='none'
633
634
  value={value}
634
635
  forwardRef={passwordRef}
635
636
  onChange={(val: any) => onChange(val)}
@@ -706,9 +707,6 @@ const LoginFormUI = (props: LoginParams) => {
706
707
  <OButton
707
708
  onClick={handleSubmit(onSubmit)}
708
709
  text={loginTab !== 'otp' ? loginButtonText : t('GET_VERIFY_CODE', 'Get verify code')}
709
- bgColor={theme.colors.primary}
710
- borderColor={theme.colors.primary}
711
- textStyle={{ color: 'white' }}
712
710
  imgRightSrc={null}
713
711
  isLoading={formState.loading}
714
712
  style={{ borderRadius: 7.6, marginTop: 10, marginBottom: 25 }}
@@ -747,7 +745,6 @@ const LoginFormUI = (props: LoginParams) => {
747
745
  <OButton
748
746
  onClick={handleVerifyCodeClick}
749
747
  text={t('GET_VERIFY_CODE', 'Get Verify Code')}
750
- borderColor={theme.colors.primary}
751
748
  style={loginStyle.btnOutline}
752
749
  imgRightSrc={null}
753
750
  isLoading={isLoadingVerifyModal}
@@ -802,7 +799,7 @@ const LoginFormUI = (props: LoginParams) => {
802
799
  handleSuccessGoogleLogin={handleSuccessFacebook}
803
800
  />
804
801
  )}
805
- {(configs?.apple_login_client_id?.value !== '' && configs?.google_login_client_id?.value !== null) && appleLoginEnabled && (
802
+ {(configs?.apple_login_client_id?.value !== '' && configs?.apple_login_client_id?.value !== null) && appleLoginEnabled && (
806
803
  <AppleLogin
807
804
  notificationState={notificationState}
808
805
  handleErrors={(err: any) => { showToast(ToastType.Error, err), vibrateApp() }}
@@ -200,7 +200,7 @@ export const OrderListing = (props: OrdersOptionParams) => {
200
200
  const OrderListingProps = {
201
201
  ...props,
202
202
  UIComponent: OrdersOptionUI,
203
- orderStatus: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23],
203
+ orderStatus: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26],
204
204
  useDefualtSessionManager: true,
205
205
  paginationSettings: {
206
206
  initialPage: 1,
@@ -237,6 +237,7 @@ export const MessageListing = (props: MessageListingParams) => {
237
237
  const [seletedOrder, setSeletedOrder] = useState<any>()
238
238
  const [openMessages, setOpenMessges] = useState(false)
239
239
  const [, t] = useLanguage()
240
+ const theme = useTheme()
240
241
 
241
242
  const goToBack = () => {
242
243
  navigation?.canGoBack() && navigation.goBack()
@@ -1,6 +1,6 @@
1
1
  import React, { useEffect, useState } from 'react'
2
2
  import Clipboard from '@react-native-clipboard/clipboard';
3
- import { Messages as MessagesController, useSession, useUtils, useLanguage, ToastType, useToast } from 'ordering-components/native'
3
+ import { Messages as MessagesController, useSession, useUtils, useLanguage, ToastType, useToast, useConfig } from 'ordering-components/native'
4
4
  import { useTheme } from 'styled-components/native';
5
5
  import { launchImageLibrary } from 'react-native-image-picker'
6
6
  import { GiftedChat, Actions, ActionsProps, InputToolbar, Composer, Send, Bubble, MessageImage, InputToolbarProps, ComposerProps } from 'react-native-gifted-chat'
@@ -39,7 +39,10 @@ const ORDER_STATUS: any = {
39
39
  20: 'ORDER_CUSTOMER_ALMOST_ARRIVED_BUSINESS',
40
40
  21: 'ORDER_CUSTOMER_ARRIVED_BUSINESS',
41
41
  22: 'ORDER_LOOKING_FOR_DRIVER',
42
- 23: 'ORDER_DRIVER_ON_WAY'
42
+ 23: 'ORDER_DRIVER_ON_WAY',
43
+ 24: 'ORDER_DRIVER_WAITING_FOR_ORDER',
44
+ 25: 'ORDER_ACCEPTED_BY_DRIVER_COMPANY',
45
+ 26: 'ORDER_DRIVER_ARRIVED_CUSTOMER'
43
46
  }
44
47
 
45
48
  const filterSpecialStatus = ['prepared_in', 'delivered_in', 'delivery_datetime']
@@ -67,13 +70,14 @@ const MessagesUI = (props: MessagesParams) => {
67
70
  } = props
68
71
 
69
72
  const [{ user }] = useSession()
73
+ const [{ configs }] = useConfig()
70
74
  const [{ parseDate }] = useUtils()
71
75
  const [, t] = useLanguage()
72
76
  const [, { showToast }] = useToast();
73
77
 
74
78
  const [formattedMessages, setFormattedMessages] = useState<Array<any>>([])
75
79
  const [isKeyboardShow, setIsKeyboardShow] = useState(false)
76
- const previousStatus = [1, 2, 5, 6, 10, 11, 12, 16, 17]
80
+ const previousStatus = [1, 2, 5, 6, 10, 11, 12, 15, 16, 17]
77
81
  const chatDisabled = previousStatus.includes(order?.status)
78
82
  const { height } = useWindowDimensions();
79
83
  const { top, bottom } = useSafeAreaInsets();
@@ -127,12 +131,12 @@ const MessagesUI = (props: MessagesParams) => {
127
131
  return message.change?.attribute !== 'driver_id'
128
132
  ?
129
133
  `${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'
132
- ? message.change.old !== null && t(ORDER_STATUS[parseInt(message.change.old, 10)])
133
- : message.change.old !== null && getLogisticTag(message.change.old)} ${t('TO', 'to')} ${message.change?.attribute !== 'logistic_status'
134
- ? t(ORDER_STATUS[parseInt(message.change.new, 10)])
135
- : getLogisticTag(message.change.new)}`
134
+ ? `${message.change.old === null ? '0' : message.change.old} ${t('TO', 'to')} ${message.change.new} ${t('MINUTES', 'Minutes')}`
135
+ : `${message.change?.attribute !== 'logistic_status'
136
+ ? message.change.old !== null && t(ORDER_STATUS[parseInt(message.change.old, 10)])
137
+ : message.change.old !== null && getLogisticTag(message.change.old)} ${t('TO', 'to')} ${message.change?.attribute !== 'logistic_status'
138
+ ? t(ORDER_STATUS[parseInt(message.change.new, 10)])
139
+ : getLogisticTag(message.change.new)}`
136
140
  }`
137
141
  : message.change.new
138
142
  ?
@@ -142,23 +146,24 @@ const MessagesUI = (props: MessagesParams) => {
142
146
  }
143
147
 
144
148
  useEffect(() => {
145
- let newMessages: Array<any> = []
149
+ const newMessages: Array<any> = []
146
150
  const _console = `${t('ORDER_PLACED_FOR', 'Order placed for')} ${parseDate(order?.created_at)} ${t('VIA', 'Via')} ${order?.app_id ? t(order?.app_id.toUpperCase(), order?.app_id) : t('OTHER', 'Other')}`
147
151
  const firstMessage = {
148
152
  _id: 0,
153
+ type: 0,
149
154
  text: _console,
150
155
  createdAt: parseDate(order?.created_at, { outputFormat: 'YYYY-MM-DD HH:mm:ss' }),
151
156
  system: true
152
157
  }
153
- const newMessage: any = [];
154
158
  messages.messages.map((message: any) => {
155
159
  if (message.change?.attribute === 'driver_group_id') return
156
160
  if (business && message.type !== 0 && (messagesToShow?.messages?.length || message?.can_see?.includes('2'))) {
157
- newMessage.push({
161
+ newMessages.push({
158
162
  _id: message?.id,
159
163
  text: message.type === 1 ? messageConsole(message) : message.comment,
160
164
  createdAt: message.type !== 0 && parseDate(message?.created_at, { outputFormat: 'YYYY-MM-DD HH:mm:ss' }),
161
165
  image: message.source,
166
+ type: message.type,
162
167
  system: message.type === 1,
163
168
  user: {
164
169
  _id: message.author && message.author.id,
@@ -169,11 +174,12 @@ const MessagesUI = (props: MessagesParams) => {
169
174
  }
170
175
 
171
176
  if (driver && message.type !== 0 && (messagesToShow?.messages?.length || message?.can_see?.includes('4'))) {
172
- newMessage.push({
177
+ newMessages.push({
173
178
  _id: message?.id,
174
179
  text: message.type === 1 ? messageConsole(message) : message.comment,
175
180
  createdAt: message.type !== 0 && parseDate(message?.created_at, { outputFormat: 'YYYY-MM-DD HH:mm:ss' }),
176
181
  image: message.source,
182
+ type: message.type,
177
183
  system: message.type === 1,
178
184
  user: {
179
185
  _id: message.author && message.author.id,
@@ -184,10 +190,15 @@ const MessagesUI = (props: MessagesParams) => {
184
190
  }
185
191
 
186
192
  if (message.type === 0) {
187
- newMessage.push(firstMessage);
188
- }
193
+ newMessages.push(firstMessage);
194
+ }
189
195
  })
190
- setFormattedMessages(newMessage.reverse())
196
+ let _arrayMessages = [...newMessages.reverse()]
197
+
198
+ if (configs?.order_logbook_enabled?.value === '0') {
199
+ _arrayMessages = _arrayMessages.filter(msg => msg.type !== 1 && msg.type !== 0)
200
+ }
201
+ setFormattedMessages(_arrayMessages);
191
202
  }, [messages.messages.length, business, driver])
192
203
 
193
204
  useEffect(() => {
@@ -461,7 +472,7 @@ const MessagesUI = (props: MessagesParams) => {
461
472
  active={business}
462
473
  >
463
474
  <OIcon
464
- url={order?.business?.logo || theme.images.dummies.businessLogo}
475
+ url={order?.business?.logo}
465
476
  width={32}
466
477
  height={32}
467
478
  style={{ borderRadius: 32 }}
@@ -503,6 +514,7 @@ const MessagesUI = (props: MessagesParams) => {
503
514
  scrollToBottom
504
515
  renderAvatarOnTop
505
516
  renderUsernameOnMessage
517
+ renderAvatar={() => null}
506
518
  renderInputToolbar={renderInputToolbar}
507
519
  renderComposer={renderComposer}
508
520
  renderSend={renderSend}
@@ -0,0 +1,56 @@
1
+ import React from 'react'
2
+ import { Pressable } from 'react-native'
3
+ import {
4
+ TimeItem,
5
+ } from './styles'
6
+ import { OIcon, OText } from '../shared'
7
+ import { useTheme } from 'styled-components/native'
8
+
9
+ const timeListItemPropsAreEqual = (prevProps: any, nextProps: any) => {
10
+ return JSON.stringify(prevProps.time) === JSON.stringify(nextProps.time) &&
11
+ JSON.stringify(prevProps.selectedTime) === JSON.stringify(nextProps.selectedTime) &&
12
+ JSON.stringify(prevProps.cateringPreorder) === JSON.stringify(nextProps.cateringPreorder)
13
+ }
14
+ export const TimeListItem = React.memo((props : any) => {
15
+ const {
16
+ time,
17
+ selectedTime,
18
+ handleChangeTimeSelected,
19
+ cateringPreorder
20
+ } = props
21
+ const theme = useTheme()
22
+
23
+ return (
24
+ <Pressable onPress={() => handleChangeTimeSelected(time.value)}>
25
+ <TimeItem
26
+ active={selectedTime === time.value}
27
+ cateringPreorder={cateringPreorder}
28
+ >
29
+ {cateringPreorder && (
30
+ <>
31
+ {selectedTime === time.value ? (
32
+ <OIcon
33
+ src={theme.images.general.option_checked}
34
+ width={18}
35
+ style={{ marginEnd: 24, bottom: 2 }}
36
+ />
37
+ ) : (
38
+ <OIcon
39
+ src={theme.images.general.option_normal}
40
+ width={18}
41
+ style={{ marginEnd: 24, bottom: 2 }}
42
+ />
43
+ )}
44
+ </>
45
+ )}
46
+ <OText
47
+ size={cateringPreorder ? 18 : 16}
48
+ color={selectedTime === time.value ? theme.colors.primary : theme.colors.textNormal}
49
+ style={{
50
+ lineHeight: 24
51
+ }}
52
+ >{time.text} {cateringPreorder && `- ${time.endText}`}</OText>
53
+ </TimeItem>
54
+ </Pressable>
55
+ )
56
+ }, timeListItemPropsAreEqual)
@@ -29,7 +29,8 @@ import {
29
29
  TimeItem
30
30
  } from './styles';
31
31
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
32
- import { locale, monthsEnum } from '../../utils';
32
+ import { monthsEnum, setLocalMoment } from '../../utils';
33
+ import { TimeListItem } from './TimeListItem';
33
34
 
34
35
  const MomentOptionUI = (props: MomentOptionParams) => {
35
36
  const {
@@ -161,6 +162,8 @@ const MomentOptionUI = (props: MomentOptionParams) => {
161
162
  const [datesWhitelist, setDateWhitelist] = useState<any>([{ start: null, end: null }])
162
163
  const [selectDate, setSelectedDate] = useState<any>(dateSelected)
163
164
  const [timeList, setTimeList] = useState<any>(hoursList)
165
+ const [nextTime, setNextTime] = useState(null)
166
+
164
167
  const goToBack = () => navigation?.canGoBack() && navigation.goBack();
165
168
 
166
169
  const _handleAsap = () => {
@@ -256,7 +259,7 @@ const MomentOptionUI = (props: MomentOptionParams) => {
256
259
  setDateWhitelist([{ start: _minDate, end: _maxDate }])
257
260
  }
258
261
  }
259
- }, [JSON.stringify(datesList), preorderMinimumDays, preorderMaximumDays, cateringPreorder])
262
+ }, [JSON.stringify(datesList), preorderMinimumDays, preorderMaximumDays])
260
263
 
261
264
  useEffect(() => {
262
265
  if (dateSelected) {
@@ -278,13 +281,21 @@ const MomentOptionUI = (props: MomentOptionParams) => {
278
281
  let _timeLists = []
279
282
  const schedule = business && getActualSchedule()
280
283
  if (!schedule && business) {
284
+ setTimeList([])
281
285
  return
282
286
  }
283
287
  _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
+ .filter(hour => {
289
+ return (Object.keys(business || {})?.length === 0 || schedule?.lapses?.some((lapse: any) => {
290
+ const openHour = lapse.open.hour < 10 ? `0${lapse.open.hour}` : lapse.open.hour
291
+ const openMinute = lapse.open.minute < 10 ? `0${lapse.open.minute}` : lapse.open.minute
292
+ const closeHour = lapse.close.hour < 10 ? `0${lapse.close.hour}` : lapse.close.hour
293
+ const closeMinute = lapse.close.minute < 10 ? `0${lapse.close.minute}` : lapse.close.minute
294
+ return moment(dateSelected + ` ${hour.startTime}`) >= moment(dateSelected + ` ${openHour}:${openMinute}`).add(preorderLeadTime, 'minutes') && moment(dateSelected + ` ${hour.endTime}`) <= moment(dateSelected + ` ${closeHour}:${closeMinute}`)
295
+ })) &&
296
+ (moment(dateSelected + ` ${hour.startTime}`) < moment(dateSelected + ` ${hour.endTime}`)) &&
297
+ (moment().add(preorderLeadTime, 'minutes') < moment(dateSelected + ` ${hour.startTime}`) || !cateringPreorder)
298
+ })
288
299
  .map(hour => {
289
300
  return {
290
301
  value: hour.startTime,
@@ -321,7 +332,28 @@ const MomentOptionUI = (props: MomentOptionParams) => {
321
332
  }
322
333
  }))
323
334
  }
324
- }, [dateSelected, JSON.stringify(hoursList), JSON.stringify(datesWhitelist), cateringPreorder, JSON.stringify(business)])
335
+ }, [dateSelected, hoursList?.length, JSON.stringify(datesWhitelist), JSON.stringify(business)])
336
+
337
+ useEffect(() => {
338
+ setLocalMoment(moment, t)
339
+ }, [])
340
+
341
+ useEffect(() => {
342
+ if (preorderMinimumDays === 0 && preorderLeadTime === 0) return
343
+ const isToday = dateSelected === moment().format('YYYY-MM-DD')
344
+ if (isCart && isToday && !orderState?.loading && timeList?.length > 0) {
345
+ setNextTime(timeList?.[0] ?? null)
346
+ }
347
+ }, [timeList?.length])
348
+
349
+ useEffect(() => {
350
+ if (nextTime?.value && timeList?.length > 0 && isCart && !orderState?.loading && !(preorderMinimumDays === 0 && preorderLeadTime === 0)) {
351
+ const notime = timeList?.filter((_: any, i: number) => i !== 0)?.find?.((time: any) => time?.value === timeSelected)
352
+ if (!notime) {
353
+ handleChangeTime(nextTime?.value)
354
+ }
355
+ }
356
+ }, [nextTime?.value])
325
357
 
326
358
  return (
327
359
  <>
@@ -395,26 +427,20 @@ const MomentOptionUI = (props: MomentOptionParams) => {
395
427
  {selectDate && datesWhitelist[0]?.start !== null && (
396
428
  <CalendarStrip
397
429
  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
430
  calendarHeaderFormat='MMMM, YYYY'
409
431
  iconStyle={{ borderWidth: 1 }}
410
432
  selectedDate={dateSelected}
411
433
  datesWhitelist={datesWhitelist}
434
+ highlightDateNumberStyle={styles.highlightDateNumber}
435
+ highlightDateNameStyle={styles.highlightDateName}
412
436
  minDate={moment()}
413
437
  maxDate={cateringPreorder ? moment().add(preorderMaximumDays, 'days') : undefined}
414
438
  disabledDateNameStyle={styles.disabledDateName}
415
439
  disabledDateNumberStyle={styles.disabledDateNumber}
416
440
  disabledDateOpacity={0.6}
417
- onDateSelected={(date) => onSelectDate(date)}
441
+ dateNumberStyle={styles.dateNumber}
442
+ dateNameStyle={styles.dateName}
443
+ onDateSelected={(date: any) => onSelectDate(date)}
418
444
  leftSelector={<LeftSelector />}
419
445
  rightSelector={<RightSelector />}
420
446
  />
@@ -422,44 +448,34 @@ const MomentOptionUI = (props: MomentOptionParams) => {
422
448
  </View>
423
449
  )}
424
450
  <TimeListWrapper nestedScrollEnabled={true} cateringPreorder={cateringPreorder}>
425
- <TimeContentWrapper>
426
- {timeList.map((time: any, i: number) => (
427
- <Pressable key={i} onPress={() => handleChangeTimeSelected(time.value)}>
428
- <TimeItem
429
- active={selectedTime === time.value}
451
+ {timeList?.length > 0 ? (
452
+ <TimeContentWrapper>
453
+ {timeList.map((time: any, i: number) => (
454
+ <TimeListItem
455
+ key={i}
456
+ time={time}
457
+ selectedTime={selectedTime}
458
+ handleChangeTimeSelected={handleChangeTimeSelected}
430
459
  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
- )}
449
- <OText
450
- size={cateringPreorder ? 18 : 16}
451
- color={selectedTime === time.value ? theme.colors.primary : theme.colors.textNormal}
452
- style={{
453
- lineHeight: 24
454
- }}
455
- >{time.text} {cateringPreorder && `- ${time.endText}`}</OText>
456
- </TimeItem>
457
- </Pressable>
458
- ))}
459
- {timeList.length % 3 === 2 && (
460
- <TimeItem style={{ backgroundColor: 'transparent' }} />
461
- )}
462
- </TimeContentWrapper>
460
+ />
461
+ ))}
462
+ {timeList.length % 3 === 2 && (
463
+ <TimeItem style={{ backgroundColor: 'transparent' }} />
464
+ )}
465
+ </TimeContentWrapper>
466
+ ) : (
467
+ <OText
468
+ size={16}
469
+ style={{
470
+ fontWeight: '600',
471
+ lineHeight: 24,
472
+ marginBottom: 12,
473
+ textAlign: 'center'
474
+ }}
475
+ >
476
+ {t('ERROR_ADD_PRODUCT_BUSINESS_CLOSED', 'The business is closed at the moment')}
477
+ </OText>
478
+ )}
463
479
  </TimeListWrapper>
464
480
  </OrderTimeWrapper>
465
481
  )}
@@ -468,7 +484,14 @@ const MomentOptionUI = (props: MomentOptionParams) => {
468
484
  </Container>
469
485
  {!isCart && !cateringPreorder && (
470
486
  <View style={{ position: 'absolute', bottom: bottom, paddingBottom: 20, paddingHorizontal: 20, 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 />
487
+ <OButton
488
+ onClick={() => handleChangeMoment()}
489
+ isDisabled={!selectedTime}
490
+ text={t('CONTINUE', 'Continue')}
491
+ style={{ borderRadius: 7.6, height: 44, shadowOpacity: 0 }}
492
+ textStyle={{ fontSize: 14 }}
493
+ showNextIcon
494
+ />
472
495
  </View>
473
496
  )}
474
497
  </>
@@ -194,4 +194,4 @@ export const MomentSelector = (props: any) => {
194
194
  maxDate: currentDate
195
195
  }
196
196
  return <MomentOptionController {...businessPreorderProps} />
197
- }
197
+ }
@@ -51,7 +51,7 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
51
51
  const { confirmApplePayPayment } = useApplePay()
52
52
 
53
53
  const [addCardOpen, setAddCardOpen] = useState({ stripe: false, stripeConnect: false });
54
-
54
+ const [newCardAdded, setNewCardAdded] = useState(null)
55
55
  const isWalletCashEnabled = configs?.wallet_cash_enabled?.value === '1'
56
56
  const isWalletPointsEnabled = configs?.wallet_credit_point_enabled?.value === '1'
57
57
 
@@ -223,6 +223,8 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
223
223
  handlePaymethodDataChange={handlePaymethodDataChange}
224
224
  clientSecret={props.clientSecret}
225
225
  onPaymentChange={handlePaymethodDataChange}
226
+ newCardAdded={newCardAdded}
227
+ addNewCardAsDefault
226
228
  />
227
229
  </View>
228
230
  )}
@@ -233,6 +235,7 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
233
235
  toSave
234
236
  businessId={businessIds[0]}
235
237
  businessIds={businessIds}
238
+ businessNames={openCarts?.map?.((cart: any) => cart?.business?.name)}
236
239
  publicKey={paymethodSelected?.data?.publishable}
237
240
  requirements={props.clientSecret}
238
241
  handleSource={handlePaymethodDataChange}
@@ -306,7 +309,7 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
306
309
  </>
307
310
  )}
308
311
 
309
- {/* <OModal
312
+ <OModal
310
313
  entireModal
311
314
  title={t('ADD_CREDIT_OR_DEBIT_CARD', 'Add credit or debit card')}
312
315
  open={addCardOpen.stripe}
@@ -326,10 +329,11 @@ const MultiCartsPaymethodsAndWalletsUI = (props: any) => {
326
329
  publicKey={paymethodSelected?.data?.publishable}
327
330
  requirements={props.clientSecret}
328
331
  onSelectCard={handlePaymethodDataChange}
332
+ setNewCardAdded={setNewCardAdded}
329
333
  onCancel={() => setAddCardOpen({ ...addCardOpen, stripe: false })}
330
334
  />
331
335
  </KeyboardAvoidingView>
332
- </OModal> */}
336
+ </OModal>
333
337
  </PMContainer>
334
338
  )
335
339
  }