ordering-ui-react-native 0.21.47 → 0.21.48-release

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/package.json +8 -8
  2. package/src/DeliveryApp.tsx +43 -1
  3. package/src/components/BusinessesListing/index.tsx +1 -1
  4. package/src/components/PaymentOptionsWebView/index.tsx +1 -0
  5. package/src/components/StripeMethodForm/index.tsx +6 -4
  6. package/src/components/VerifyPhone/styles.tsx +1 -2
  7. package/src/types/index.tsx +3 -1
  8. package/src/utils/index.tsx +2 -2
  9. package/themes/business/index.tsx +6 -0
  10. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +4 -3
  11. package/themes/business/src/components/BusinessController/index.tsx +19 -17
  12. package/themes/business/src/components/BusinessProductList/AccordionDropdown.tsx +63 -0
  13. package/themes/business/src/components/BusinessProductList/IterateCategories.tsx +108 -0
  14. package/themes/business/src/components/BusinessProductList/ProductList.tsx +196 -0
  15. package/themes/business/src/components/BusinessProductList/index.tsx +196 -0
  16. package/themes/business/src/components/BusinessProductList/styles.tsx +10 -0
  17. package/themes/business/src/components/DriverMap/index.tsx +36 -23
  18. package/themes/business/src/components/GoogleMap/index.tsx +15 -8
  19. package/themes/business/src/components/Home/index.tsx +5 -1
  20. package/themes/business/src/components/LanguageSelector/index.tsx +1 -2
  21. package/themes/business/src/components/LanguageSelector/lang_country.json +515 -70
  22. package/themes/business/src/components/LogoutButton/index.tsx +1 -1
  23. package/themes/business/src/components/MapView/index.tsx +30 -15
  24. package/themes/business/src/components/MessagesOption/index.tsx +2 -1
  25. package/themes/business/src/components/NewOrderNotification/index.tsx +66 -26
  26. package/themes/business/src/components/OrderDetails/Business.tsx +52 -2
  27. package/themes/business/src/components/OrderDetails/Delivery.tsx +30 -11
  28. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +68 -61
  29. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +40 -20
  30. package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +220 -0
  31. package/themes/business/src/components/OrderSummary/index.tsx +240 -76
  32. package/themes/business/src/components/OrdersListManager/index.tsx +7 -2
  33. package/themes/business/src/components/OrdersListManager/utils.tsx +1 -1
  34. package/themes/business/src/components/OrdersOption/index.tsx +253 -135
  35. package/themes/business/src/components/PhoneInputNumber/index.tsx +8 -5
  36. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +37 -40
  37. package/themes/business/src/components/PreviousOrders/OrderList.tsx +1 -1
  38. package/themes/business/src/components/PreviousOrders/index.tsx +5 -3
  39. package/themes/business/src/components/PreviousOrders/styles.tsx +10 -0
  40. package/themes/business/src/components/PrinterEdition/index.tsx +363 -0
  41. package/themes/business/src/components/PrinterEdition/styles.tsx +61 -0
  42. package/themes/business/src/components/PrinterSettings/index.tsx +267 -0
  43. package/themes/business/src/components/PrinterSettings/styles.tsx +30 -0
  44. package/themes/business/src/components/ProductItemAccordion/index.tsx +2 -2
  45. package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
  46. package/themes/business/src/components/SearchBar/index.tsx +2 -1
  47. package/themes/business/src/components/Sessions/index.tsx +187 -0
  48. package/themes/business/src/components/Sessions/styles.tsx +20 -0
  49. package/themes/business/src/components/StoresList/index.tsx +5 -3
  50. package/themes/business/src/components/UserFormDetails/index.tsx +111 -107
  51. package/themes/business/src/components/UserProfileForm/index.tsx +106 -54
  52. package/themes/business/src/components/WebsocketStatus/index.tsx +171 -0
  53. package/themes/business/src/components/WebsocketStatus/styles.tsx +28 -0
  54. package/themes/business/src/components/shared/OInput.tsx +2 -0
  55. package/themes/business/src/components/shared/OTextarea.tsx +8 -9
  56. package/themes/business/src/hooks/useLocation.tsx +5 -4
  57. package/themes/business/src/types/index.tsx +21 -5
  58. package/themes/business/src/utils/index.tsx +5 -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/Checkout/index.tsx +6 -0
  63. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  64. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  65. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  66. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  67. package/themes/original/index.tsx +6 -2
  68. package/themes/original/src/components/AddressDetails/index.tsx +20 -10
  69. package/themes/original/src/components/AddressForm/index.tsx +41 -12
  70. package/themes/original/src/components/AddressForm/styles.tsx +1 -1
  71. package/themes/original/src/components/AddressList/index.tsx +18 -4
  72. package/themes/original/src/components/AddressList/styles.tsx +4 -4
  73. package/themes/original/src/components/AnalyticsSegment/index.tsx +6 -6
  74. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  75. package/themes/original/src/components/BusinessBasicInformation/index.tsx +7 -10
  76. package/themes/original/src/components/BusinessBasicInformation/styles.tsx +1 -1
  77. package/themes/original/src/components/BusinessController/index.tsx +18 -10
  78. package/themes/original/src/components/BusinessController/styles.tsx +8 -7
  79. package/themes/original/src/components/BusinessInformation/styles.tsx +2 -2
  80. package/themes/original/src/components/BusinessItemAccordion/index.tsx +11 -7
  81. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +317 -0
  82. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +96 -0
  83. package/themes/original/src/components/BusinessListingSearch/MaxSectionItem/index.tsx +1 -1
  84. package/themes/original/src/components/BusinessListingSearch/index.tsx +47 -358
  85. package/themes/original/src/components/BusinessListingSearch/styles.tsx +1 -1
  86. package/themes/original/src/components/BusinessPreorder/index.tsx +4 -3
  87. package/themes/original/src/components/BusinessProductsCategories/index.tsx +1 -1
  88. package/themes/original/src/components/BusinessProductsList/index.tsx +1 -1
  89. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  90. package/themes/original/src/components/BusinessProductsListing/index.tsx +31 -18
  91. package/themes/original/src/components/BusinessProductsListing/styles.tsx +2 -2
  92. package/themes/original/src/components/BusinessReviews/index.tsx +1 -1
  93. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +1 -1
  94. package/themes/original/src/components/BusinessesListing/Layout/Appointment/styles.tsx +5 -5
  95. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListFooter.tsx +1 -1
  96. package/themes/original/src/components/BusinessesListing/Layout/Original/FlatListBusinessListHeader.tsx +7 -7
  97. package/themes/original/src/components/BusinessesListing/Layout/Original/index.tsx +2 -2
  98. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
  99. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  100. package/themes/original/src/components/Cart/index.tsx +32 -9
  101. package/themes/original/src/components/CartContent/index.tsx +96 -58
  102. package/themes/original/src/components/CartStoresListing/styles.tsx +2 -2
  103. package/themes/original/src/components/Checkout/index.tsx +144 -62
  104. package/themes/original/src/components/Checkout/styles.tsx +17 -0
  105. package/themes/original/src/components/CitiesControl/styles.tsx +1 -1
  106. package/themes/original/src/components/DatePicker/index.tsx +18 -2
  107. package/themes/original/src/components/Favorite/index.tsx +9 -9
  108. package/themes/original/src/components/Favorite/styles.tsx +0 -2
  109. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  110. package/themes/original/src/components/ForgotPasswordForm/index.tsx +5 -0
  111. package/themes/original/src/components/GPSButton/index.tsx +1 -1
  112. package/themes/original/src/components/GiftCard/GiftCardOrdersList/index.tsx +64 -0
  113. package/themes/original/src/components/GiftCard/GiftCardOrdersList/styles.tsx +8 -0
  114. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +1 -1
  115. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +1 -1
  116. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +2 -2
  117. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +1 -1
  118. package/themes/original/src/components/GiftCard/SingleGiftCard/index.tsx +101 -0
  119. package/themes/original/src/components/GiftCard/SingleGiftCard/styles.tsx +4 -0
  120. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +83 -0
  121. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/styles.tsx +9 -0
  122. package/themes/original/src/components/GoogleMap/index.tsx +39 -18
  123. package/themes/original/src/components/Help/index.tsx +7 -0
  124. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +5 -0
  125. package/themes/original/src/components/HelpGuide/index.tsx +5 -0
  126. package/themes/original/src/components/HelpOrder/index.tsx +5 -0
  127. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +2 -2
  128. package/themes/original/src/components/HighestRatedBusinesses/styles.tsx +1 -1
  129. package/themes/original/src/components/Home/index.tsx +3 -8
  130. package/themes/original/src/components/LoginForm/Otp/index.tsx +4 -16
  131. package/themes/original/src/components/LoginForm/index.tsx +9 -3
  132. package/themes/original/src/components/MessageListing/index.tsx +6 -0
  133. package/themes/original/src/components/Messages/index.tsx +8 -7
  134. package/themes/original/src/components/Messages/styles.tsx +1 -1
  135. package/themes/original/src/components/MomentOption/index.tsx +19 -4
  136. package/themes/original/src/components/MultiCart/index.tsx +1 -1
  137. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +7 -3
  138. package/themes/original/src/components/MultiCheckout/index.tsx +126 -61
  139. package/themes/original/src/components/MultiCheckout/styles.tsx +17 -0
  140. package/themes/original/src/components/MultiOrdersDetails/index.tsx +20 -15
  141. package/themes/original/src/components/MyOrders/index.tsx +28 -28
  142. package/themes/original/src/components/NavBar/index.tsx +5 -0
  143. package/themes/original/src/components/NetworkError/index.tsx +2 -3
  144. package/themes/original/src/components/NetworkError/styles.tsx +2 -2
  145. package/themes/original/src/components/Notifications/index.tsx +9 -8
  146. package/themes/original/src/components/Notifications/styles.tsx +0 -1
  147. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +1 -1
  148. package/themes/original/src/components/OrderDetails/index.tsx +701 -662
  149. package/themes/original/src/components/OrderDetails/styles.tsx +24 -8
  150. package/themes/original/src/components/OrderProgress/index.tsx +22 -3
  151. package/themes/original/src/components/OrderProgress/styles.tsx +1 -1
  152. package/themes/original/src/components/OrderSummary/index.tsx +3 -1
  153. package/themes/original/src/components/OrderTypeSelector/index.tsx +10 -6
  154. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/styles.tsx +1 -1
  155. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/styles.tsx +1 -1
  156. package/themes/original/src/components/OrdersOption/index.tsx +3 -5
  157. package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
  158. package/themes/original/src/components/PaymentOptionCard/index.tsx +4 -2
  159. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  160. package/themes/original/src/components/PaymentOptions/index.tsx +47 -4
  161. package/themes/original/src/components/PreviousOrders/index.tsx +2 -0
  162. package/themes/original/src/components/ProductForm/ActionButton.tsx +122 -0
  163. package/themes/original/src/components/ProductForm/ExtraOptions.tsx +56 -0
  164. package/themes/original/src/components/ProductForm/index.tsx +170 -252
  165. package/themes/original/src/components/ProductItemAccordion/index.tsx +55 -44
  166. package/themes/original/src/components/ProductItemAccordion/styles.tsx +3 -4
  167. package/themes/original/src/components/ProductOptionSubOption/index.tsx +112 -91
  168. package/themes/original/src/components/ProfessionalProfile/styles.tsx +3 -3
  169. package/themes/original/src/components/Promotions/index.tsx +13 -11
  170. package/themes/original/src/components/Promotions/styles.tsx +0 -2
  171. package/themes/original/src/components/ReviewDriver/index.tsx +5 -0
  172. package/themes/original/src/components/ReviewDriver/styles.tsx +1 -1
  173. package/themes/original/src/components/ReviewOrder/index.tsx +5 -0
  174. package/themes/original/src/components/ReviewOrder/styles.tsx +1 -1
  175. package/themes/original/src/components/ReviewProducts/index.tsx +5 -0
  176. package/themes/original/src/components/ReviewProducts/styles.tsx +1 -1
  177. package/themes/original/src/components/ServiceForm/index.tsx +1 -1
  178. package/themes/original/src/components/ServiceForm/styles.tsx +4 -4
  179. package/themes/original/src/components/Sessions/index.tsx +5 -0
  180. package/themes/original/src/components/SignupForm/index.tsx +67 -59
  181. package/themes/original/src/components/SingleOrderCard/index.tsx +3 -2
  182. package/themes/original/src/components/SingleProductCard/index.tsx +4 -3
  183. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  184. package/themes/original/src/components/StripeCardsList/index.tsx +12 -35
  185. package/themes/original/src/components/StripeElementsForm/index.tsx +79 -59
  186. package/themes/original/src/components/StripeElementsForm/naked.tsx +48 -1
  187. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +170 -0
  188. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +91 -0
  189. package/themes/original/src/components/UpsellingProducts/index.tsx +15 -199
  190. package/themes/original/src/components/UpsellingProducts/styles.tsx +19 -0
  191. package/themes/original/src/components/UserFormDetails/index.tsx +100 -86
  192. package/themes/original/src/components/UserFormDetails/styles.tsx +7 -0
  193. package/themes/original/src/components/UserProfile/index.tsx +3 -2
  194. package/themes/original/src/components/UserProfileForm/index.tsx +5 -0
  195. package/themes/original/src/components/WalletTransactions/styles.tsx +1 -0
  196. package/themes/original/src/components/Wallets/index.tsx +7 -4
  197. package/themes/original/src/components/Wallets/styles.tsx +2 -1
  198. package/themes/original/src/components/WebsocketStatus/index.tsx +172 -0
  199. package/themes/original/src/components/WebsocketStatus/styles.tsx +28 -0
  200. package/themes/original/src/components/shared/HeaderTitle.tsx +1 -1
  201. package/themes/original/src/components/shared/OButton.tsx +5 -5
  202. package/themes/original/src/components/shared/OInput.tsx +1 -4
  203. package/themes/original/src/components/shared/OModal.tsx +12 -14
  204. package/themes/original/src/layouts/Container.tsx +5 -3
  205. package/themes/original/src/types/index.tsx +4 -1
  206. package/themes/original/src/utils/index.tsx +12 -1
  207. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,5 +1,5 @@
1
1
  import React, { useEffect, useState } from 'react';
2
- import { Platform, PlatformIOSStatic, StyleSheet, TouchableOpacity, View } from 'react-native';
2
+ import { Platform, PlatformIOSStatic, Pressable, StyleSheet, View } from 'react-native';
3
3
  import DeviceInfo from 'react-native-device-info';
4
4
  import { useTheme } from 'styled-components/native';
5
5
  import { useLanguage, useUtils, useConfig } from 'ordering-components/native';
@@ -47,6 +47,7 @@ export const OrderItem = React.memo((props: any) => {
47
47
  timer: configState?.configs?.order_deadlines_enabled?.value === '1',
48
48
  slaBar: configState?.configs?.order_deadlines_enabled?.value === '1',
49
49
  })
50
+ const showExternalId = configState?.configs?.change_order_id?.value === '1'
50
51
 
51
52
  const IS_PORTRAIT = orientationState.orientation === PORTRAIT
52
53
  const platformIOS = Platform as PlatformIOSStatic
@@ -76,7 +77,6 @@ export const OrderItem = React.memo((props: any) => {
76
77
  marginLeft: 3,
77
78
  },
78
79
  title: {
79
- marginBottom: 6,
80
80
  fontFamily: 'Poppins',
81
81
  fontStyle: 'normal',
82
82
  fontWeight: '600',
@@ -84,7 +84,6 @@ export const OrderItem = React.memo((props: any) => {
84
84
  color: theme.colors.textGray,
85
85
  },
86
86
  date: {
87
- marginBottom: 6,
88
87
  fontFamily: 'Poppins',
89
88
  fontStyle: 'normal',
90
89
  fontWeight: 'normal',
@@ -100,12 +99,13 @@ export const OrderItem = React.memo((props: any) => {
100
99
  });
101
100
 
102
101
  const getDelayMinutes = (order: any) => {
103
- const cdtToutc = moment(order?.delivery_datetime).utc().format('YYYY-MM-DD HH:mm:ss')
102
+ const offset = 300
103
+ const cdtToutc = moment(order?.delivery_datetime).add(offset, 'minutes').format('YYYY-MM-DD HH:mm:ss')
104
104
  const _delivery = order?.delivery_datetime_utc
105
- ? parseDate(order?.delivery_datetime_utc)
106
- : parseDate(cdtToutc)
105
+ ? parseDate(order?.delivery_datetime_utc, { outputFormat: 'YYYY-MM-DD HH:mm:ss' })
106
+ : parseDate(cdtToutc, { outputFormat: 'YYYY-MM-DD HH:mm:ss' })
107
107
  const _eta = order?.eta_time
108
- const diffTimeAsSeconds = moment(_delivery, 'YYYY-MM-DD hh:mm A').add(_eta, 'minutes').diff(moment().utc(), 'seconds')
108
+ const diffTimeAsSeconds = moment(_delivery).add(_eta, 'minutes').diff(moment().utc(), 'seconds')
109
109
  return Math.ceil(diffTimeAsSeconds / 60)
110
110
  }
111
111
 
@@ -119,7 +119,7 @@ export const OrderItem = React.memo((props: any) => {
119
119
  let restHours: string | number = Math.floor(restMinOfTargetedMin / 60)
120
120
  let restMins: string | number = restMinOfTargetedMin - 60 * restHours
121
121
  // make standard time format
122
- day = day === 0 ? '' : day + 'day '
122
+ day = day === 0 ? '' : `${day + ' ' + t('DAY', 'day') + ' '}`
123
123
  restHours = restHours < 10 ? '0' + restHours : restHours
124
124
  restMins = restMins < 10 ? '0' + restMins : restMins
125
125
 
@@ -127,12 +127,6 @@ export const OrderItem = React.memo((props: any) => {
127
127
  return finalTaget
128
128
  }
129
129
 
130
- const getStatusClassName = (minutes: number) => {
131
- if (isNaN(Number(minutes))) return 'in_time'
132
- const delayTime = configState?.configs?.order_deadlines_delayed_time?.value
133
- return minutes > 0 ? 'in_time' : Math.abs(minutes) <= delayTime ? 'at_risk' : 'delayed'
134
- }
135
-
136
130
  useEffect(() => {
137
131
  const slaSettings = configState?.configs?.order_deadlines_enabled?.value === '1'
138
132
  setAllowColumns({
@@ -143,8 +137,7 @@ export const OrderItem = React.memo((props: any) => {
143
137
  }, [configState.loading])
144
138
 
145
139
  return (
146
- <TouchableOpacity
147
- activeOpacity={1}
140
+ <Pressable
148
141
  disabled={order?.locked && isLogisticOrder}
149
142
  style={styles.cardButton}
150
143
  onPress={() => handlePressOrder({ ...order, logistic_order_id: _order?.id })}
@@ -152,24 +145,16 @@ export const OrderItem = React.memo((props: any) => {
152
145
  <Card key={order.id}>
153
146
  {!!allowColumns?.slaBar && (
154
147
  <Timestatus
155
- style={{
156
- backgroundColor: getStatusClassName(getDelayMinutes(order)) === 'in_time'
157
- ? '#00D27A'
158
- : getStatusClassName(getDelayMinutes(order)) === 'at_risk'
159
- ? '#FFC700'
160
- : getStatusClassName(getDelayMinutes(order)) === 'delayed'
161
- ? '#E63757'
162
- : ''
163
- }}
148
+ timeState={order?.time_status}
164
149
  />
165
150
  )}
166
151
  <Logo style={styles.logo}>
167
152
  <FastImage
168
153
  style={styles.icon}
169
- source={order.business?.logo ? {
170
- uri: optimizeImage(order.business?.logo, 'h_100,c_limit'),
154
+ source={order.business?.logo?.includes('https') ? {
155
+ uri: order.business?.logo,
171
156
  priority: FastImage.priority.normal,
172
- } : theme?.images?.dummies?.businessLogo}
157
+ } : order.business?.logo ?? theme?.images?.dummies?.businessLogo}
173
158
  resizeMode={FastImage.resizeMode.cover}
174
159
  />
175
160
  </Logo>
@@ -193,32 +178,44 @@ export const OrderItem = React.memo((props: any) => {
193
178
  />
194
179
  </NotificationIcon>
195
180
  )}
196
- <View style={{ flexDirection: 'row', flexWrap: 'wrap' }}>
197
- <OText
181
+ <View>
182
+ {!order?.order_group_id && showExternalId && !order?.order_group && (
183
+ <OText
184
+ style={styles.date}
185
+ color={theme.colors.unselectText}
186
+ numberOfLines={1}
187
+ adjustsFontSizeToFit
188
+ >
189
+ {`${order?.external_id ?? t('NO_EXTERNAL_ID', 'No external Id ') + t('NO', 'Order No.') + order?.id}` + ' · ' + `${order?.delivery_datetime_utc
190
+ ? parseDate(order?.delivery_datetime_utc)
191
+ : parseDate(order?.delivery_datetime, { utc: false })
192
+ }`}
193
+ </OText>
194
+ )}
195
+ {!showExternalId && (<OText
198
196
  style={styles.date}
199
197
  color={theme.colors.unselectText}
200
198
  numberOfLines={1}
201
199
  adjustsFontSizeToFit
202
200
  >
203
- {(!!order?.order_group_id && order?.order_group && isLogisticOrder
201
+ {((!!order?.order_group_id && order?.order_group && isLogisticOrder
204
202
  ? `${order?.order_group?.orders?.length} ${t('ORDERS', 'Orders')}`
205
- : (t('NO', 'Order No.') + order.id)
206
- ) + ' · '}
207
- {order?.delivery_datetime_utc
203
+ : (t('NO', 'Order No.') + order?.id)
204
+ ) + ' · ' + `${order?.delivery_datetime_utc
208
205
  ? parseDate(order?.delivery_datetime_utc)
209
- : parseDate(order?.delivery_datetime, { utc: false })}
206
+ : parseDate(order?.delivery_datetime, { utc: false })}`)}
210
207
  </OText>
208
+ )}
211
209
  {((currentTabSelected === 'pending' || currentTabSelected === 'inProgress') && allowColumns?.timer) && (
212
210
  <>
213
- <OText> · </OText>
214
211
  <OText
215
212
  style={styles.date}
216
213
  color={
217
- getStatusClassName(getDelayMinutes(order)) === 'in_time'
214
+ order?.time_status === 'in_time'
218
215
  ? '#00D27A'
219
- : getStatusClassName(getDelayMinutes(order)) === 'at_risk'
216
+ : order?.time_status === 'at_risk'
220
217
  ? '#FFC700'
221
- : getStatusClassName(getDelayMinutes(order)) === 'delayed'
218
+ : order?.time_status === 'delayed'
222
219
  ? '#E63757'
223
220
  : ''}
224
221
  >
@@ -250,6 +247,6 @@ export const OrderItem = React.memo((props: any) => {
250
247
  )}
251
248
  </Information>
252
249
  </Card>
253
- </TouchableOpacity>
250
+ </Pressable>
254
251
  )
255
252
  }, OrderItemPropsAreEqual)
@@ -8,7 +8,7 @@ import { AcceptOrRejectOrder as AcceptOrRejectOrderStyle } from './styles';
8
8
 
9
9
  function OrderListPropsAreEqual(prevProps: any, nextProps: any) {
10
10
  return JSON.stringify(prevProps.order) === JSON.stringify(nextProps.order) &&
11
- JSON.stringify(prevProps._order) === JSON.stringify(nextProps._order) &&
11
+ JSON.stringify(prevProps._order) === JSON.stringify(nextProps._order) &&
12
12
  JSON.stringify(prevProps.currentOrdenSelected) === JSON.stringify(nextProps.currentOrdenSelected) &&
13
13
  prevProps.currentTabSelected === nextProps.currentTabSelected
14
14
  }
@@ -45,6 +45,8 @@ export const PreviousOrders = (props: any) => {
45
45
  const deliveryPickupBtn = props.appTitle?.text?.includes('Delivery') && [3, 8, 18]
46
46
  const deliveryStatusCompleteBtn = props.appTitle?.text?.includes('Delivery') && [9, 19, 23]
47
47
  const isHideRejectButtons = configs?.reject_orders_enabled && configs?.reject_orders_enabled?.value !== '1' && !isBusinessApp
48
+ const isEnabledOrderNotReady = configs?.order_not_ready_enabled?.value === '1'
49
+ const isEnabledFailedPickupDriver = configs?.failed_pickup_by_driver_enabled?.value === '1'
48
50
 
49
51
  const handlePressOrder = (order: any) => {
50
52
  if (order?.locked && isLogisticOrder) return
@@ -242,7 +244,7 @@ export const PreviousOrders = (props: any) => {
242
244
  />
243
245
  </AcceptOrRejectOrderStyle>
244
246
  )}
245
- {_ordersGrouped[k][0]?.status === 3 && _ordersGrouped[k][0]?.delivery_type === 1 && !isHideRejectButtons &&
247
+ {_ordersGrouped[k][0]?.status === 3 && _ordersGrouped[k][0]?.delivery_type === 1 && !isHideRejectButtons && isEnabledOrderNotReady &&
246
248
  (
247
249
  <AcceptOrRejectOrderStyle>
248
250
  <OButton
@@ -330,9 +332,9 @@ export const PreviousOrders = (props: any) => {
330
332
  })}
331
333
  />
332
334
  )}
333
- {!!deliveryPickupBtn && deliveryPickupBtn?.includes(_ordersGrouped[k][0]?.status) && (
335
+ {!!deliveryPickupBtn && deliveryPickupBtn?.includes(_ordersGrouped[k][0]?.status) && isEnabledFailedPickupDriver && (
334
336
  <AcceptOrRejectOrderStyle>
335
- {!isHideRejectButtons && (
337
+ {!isHideRejectButtons && isEnabledOrderNotReady && (
336
338
  <OButton
337
339
  text={t('PICKUP_FAILED', 'Pickup failed')}
338
340
  bgColor={theme.colors.danger100}
@@ -41,6 +41,16 @@ export const Timestatus = styled.View`
41
41
  height: 55px;
42
42
  border-radius: 20px;
43
43
  top: 5px;
44
+
45
+ ${({ timeState }: any) => timeState === 'in_time' && css`
46
+ background-color: #00D27A;
47
+ `}
48
+ ${({ timeState }: any) => timeState === 'at_risk' && css`
49
+ background-color: #FFC700;
50
+ `}
51
+ ${({ timeState }: any) => timeState === 'delayed' && css`
52
+ background-color: #E63757;
53
+ `}
44
54
  `
45
55
 
46
56
  export const AccordionSection = styled.View`
@@ -0,0 +1,363 @@
1
+ import React, { useEffect, useState } from 'react'
2
+ import { Dimensions, SafeAreaView, StyleSheet, View } from 'react-native';
3
+ import SelectDropdown from 'react-native-select-dropdown'
4
+ import { useLanguage } from 'ordering-components/native'
5
+ import { useTheme } from 'styled-components/native'
6
+ import { useForm, Controller } from 'react-hook-form';
7
+ import FAIcons from 'react-native-vector-icons/FontAwesome'
8
+ import MCIcons from 'react-native-vector-icons/MaterialCommunityIcons'
9
+ import SimpleLineIcons from 'react-native-vector-icons/SimpleLineIcons'
10
+ import FeatherIcon from 'react-native-vector-icons/Feather'
11
+ import {
12
+ ContainerEdition,
13
+ BackArrowWrapper,
14
+ BackArrow,
15
+ WrapperIcons,
16
+ WrapperHeader,
17
+ WrapperIcon
18
+ } from './styles'
19
+
20
+ import { Container } from '../../layouts/Container'
21
+ import { OText, OInput, OIcon, OButton } from '../shared'
22
+
23
+ const printerList = [
24
+ { nickname: 'mPOP', model: 'mPOP', emulation: 'StarPRNT', portName1: 'BT:mPOP', type: 1, ip: '', printMode: 'append' },
25
+ { nickname: 'FVP10', model: 'FVP10', emulation: 'StarLine', portName1: 'BT:FVP10', type: 1, ip: '', printMode: 'append' },
26
+ { nickname: 'TSP100', model: 'TSP100', emulation: 'StarGraphic', portName1: 'BT:TSP100', type: 1, ip: '', printMode: 'appendBitmapText' },
27
+ { nickname: 'TSP100IV', model: 'TSP100IV', emulation: 'StarLine', portName1: 'BT:TSP100iv', type: 1, ip: '', printMode: 'append' },
28
+ { nickname: 'TSP65011', model: 'TSP65011', emulation: 'StarLine', portName1: 'BT:TSP65011', type: 1, ip: '', printMode: 'append' },
29
+ { nickname: 'TSP7001', model: 'TSP7001', emulation: 'StarLine', portName1: 'BT:TSP7001', type: 1, ip: '', printMode: 'append' },
30
+ { nickname: 'TSP80011', model: 'TSP80011', emulation: 'StarLine', portName1: 'BT:TSP80011', type: 1, ip: '', printMode: 'append' },
31
+ { nickname: 'SP700', model: 'SP700', emulation: 'StarDotImpact', portName1: 'BT:SP700', type: 1, ip: '', printMode: 'append' },
32
+ { nickname: 'SM-S210i', model: 'SM-S210i', emulation: 'EscPosMobile', portName1: 'BT:SMS210i', type: 1, ip: '', printMode: 'append' },
33
+ { nickname: 'SM-S220i', model: 'SM-S220i', emulation: 'EscPosMobile', portName1: 'BT:SMS220i', type: 1, ip: '', printMode: 'append' },
34
+ { nickname: 'SM-S230i', model: 'SM-S230i', emulation: 'EscosMobile', portName1: 'BT:SMS230i', type: 1, ip: '', printMode: 'append' },
35
+ { nickname: 'SM-T300i/T300', model: 'SM-T300i/T300', emulation: 'EscPosMobile', portName1: 'BT:SMT300i/T300', type: 1, ip: '', printMode: 'append' },
36
+ { nickname: 'SM-T400i', model: 'SM-T400i', emulation: 'EscosMobile', portName1: 'BT:SMT400i', type: 1, ip: '', printMode: 'append' },
37
+ { nickname: 'SM-L200', model: 'SM-L200', emulation: 'StarPRNT', portName1: 'BT:SML200', type: 1, ip: '', printMode: 'append' },
38
+ { nickname: 'SM-L300', model: 'SM-L300', emulation: 'StarPRNT', portName1: 'BT:SML300', type: 1, ip: '', printMode: 'append' },
39
+ { nickname: 'BSC10', model: 'BSC10', emulation: 'EscPos', portName1: 'BT:BSC10', type: 1, ip: '', printMode: 'append' },
40
+ { nickname: 'SM-S210i StarPRNT', model: 'SM-S210i StarPRNT', emulation: 'StarPRNT', portName1: 'BT:SMS210i', type: 1, ip: '', printMode: 'append' },
41
+ { nickname: 'SM-S220i StarPRNT', model: 'SM-S220i StarPRNT', emulation: 'StarPRNT', portName1: 'BT:SMS220i', type: 1, ip: '', printMode: 'append' },
42
+ { nickname: 'SM-S230i StarPRNT', model: 'SM-S230i StarPRNT', emulation: 'StarPRNT', portName1: 'BT:SMS230i', type: 1, ip: '', printMode: 'append' },
43
+ { nickname: 'SM-T300i/T300 StarPRNT', model: 'SM-T300i/T300 StarPRNT', emulation: 'StarPRNT', portName1: 'BT:SMT300i', type: 1, ip: '', printMode: 'append' },
44
+ { nickname: 'SM-T400i StarPRNT', model: 'SM-T400i StarPRNT', emulation: 'StarPRNT', portName1: 'BT:SMT400i', type: 1, ip: '', printMode: 'append' },
45
+ ]
46
+
47
+ export const PrinterEdition = (props: any) => {
48
+ const {
49
+ printer,
50
+ onClose
51
+ } = props
52
+
53
+ const HEIGHT_SCREEN = Dimensions.get('window').height
54
+ const [, t] = useLanguage()
55
+ const theme = useTheme()
56
+ const { handleSubmit, control, setValue, watch } = useForm();
57
+
58
+ const watchIp = watch('ip')
59
+ const watchNickname = watch('nickname')
60
+ const isErrorIp = !/^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/i.test(watchIp)
61
+ const isErrorNickname = watchNickname && !/^[a-zA-Z0-9\s]+$/i.test(watchNickname)
62
+
63
+ const [currentPrinter, setCurrentPrinter] = useState(printer)
64
+
65
+ const styles = StyleSheet.create({
66
+ icons: {
67
+ maxWidth: 40,
68
+ height: 40,
69
+ padding: 10,
70
+ alignItems: 'flex-end'
71
+ },
72
+ optionIcons: {
73
+ paddingRight: 10
74
+ },
75
+ inputStyle: {
76
+ height: 40,
77
+ borderWidth: 1,
78
+ borderRadius: 8,
79
+ },
80
+ savePrinterBtnText: {
81
+ color: theme.colors.white,
82
+ fontSize: 18,
83
+ },
84
+ savePrinterBtn: {
85
+ height: 44,
86
+ borderRadius: 8,
87
+ marginHorizontal: 20
88
+ }
89
+ })
90
+
91
+ const handleChangePrinter = (values: any) => {
92
+ props.handleChangePrinter({
93
+ ...values,
94
+ index: currentPrinter?.index ?? null,
95
+ type: currentPrinter?.type,
96
+ ip: currentPrinter?.ip,
97
+ item: currentPrinter
98
+ })
99
+ }
100
+
101
+ const onSubmit = () => {
102
+ handleChangePrinter({ edit: !!printer, isAdd: !printer })
103
+ onClose && onClose()
104
+ }
105
+
106
+ useEffect(() => {
107
+ currentPrinter?.ip && setValue('ip', currentPrinter?.ip)
108
+ currentPrinter?.nickname && setValue('nickname', currentPrinter?.nickname)
109
+ }, [currentPrinter?.type])
110
+
111
+ useEffect(() => {
112
+ setCurrentPrinter(printer)
113
+ }, [printer])
114
+
115
+ return (
116
+ <SafeAreaView style={{ flex: 1, marginBottom: 20 }}>
117
+ <Container>
118
+ <ContainerEdition>
119
+ <BackArrowWrapper>
120
+ <BackArrow activeOpacity={1} onPress={() => onClose()}>
121
+ <OIcon
122
+ src={theme.images.general.arrow_left}
123
+ color={theme.colors.textGray}
124
+ />
125
+ </BackArrow>
126
+ </BackArrowWrapper>
127
+ <WrapperHeader>
128
+ <SimpleLineIcons
129
+ name='printer'
130
+ color={theme.colors.textGray}
131
+ size={20}
132
+ style={{
133
+ ...styles.icons,
134
+ paddingLeft: 0,
135
+ color: theme.colors.primary
136
+ }}
137
+ />
138
+ <OText
139
+ size={22}
140
+ style={{ paddingTop: 0 }}
141
+ >
142
+ {t('PRINTER_CONFIGURE', 'Printer Configure')}
143
+ </OText>
144
+ </WrapperHeader>
145
+
146
+ <SelectDropdown
147
+ data={printerList}
148
+ defaultValueByIndex={printerList.findIndex(p => p.model === currentPrinter?.model)}
149
+ dropdownOverlayColor='transparent'
150
+ defaultButtonText={t('SELECT_PRINTER', 'Select printer')}
151
+ buttonTextAfterSelection={item => item.model}
152
+ rowTextForSelection={item => item.model}
153
+ renderDropdownIcon={() => dropDownIcon()}
154
+ buttonStyle={{
155
+ width: '100%',
156
+ backgroundColor: theme.colors.primary,
157
+ borderRadius: 8,
158
+ flexDirection: 'row-reverse',
159
+ justifyContent: 'space-between',
160
+ alignItems: 'center',
161
+ height: 44,
162
+ marginTop: 20,
163
+ }}
164
+ buttonTextStyle={{
165
+ color: theme.colors.white,
166
+ fontSize: 18,
167
+ textAlign: 'left',
168
+ marginHorizontal: 0
169
+ }}
170
+ dropdownStyle={{
171
+ borderRadius: 8,
172
+ borderColor: theme.colors.primary,
173
+ maxHeight: HEIGHT_SCREEN * 0.3
174
+ }}
175
+ rowStyle={{
176
+ borderBottomColor: theme.colors.disabled,
177
+ backgroundColor: theme.colors.gray100,
178
+ height: 40,
179
+ flexDirection: 'column',
180
+ alignItems: 'flex-start',
181
+ paddingTop: 8,
182
+ paddingHorizontal: 14,
183
+ width: '100%'
184
+ }}
185
+ rowTextStyle={{
186
+ marginHorizontal: 0,
187
+ fontSize: 14,
188
+ }}
189
+ onSelect={item => setCurrentPrinter(item)}
190
+ />
191
+ {!!currentPrinter && (
192
+ <WrapperIcons>
193
+ <OText
194
+ size={20}
195
+ style={{ paddingTop: 0, marginBottom: 10 }}
196
+ >
197
+ {`${t('PRINTER_NICKNAME', 'Nickname')}:`}
198
+ </OText>
199
+ <Controller
200
+ control={control}
201
+ name={'nickname'}
202
+ rules={{
203
+ pattern: {
204
+ value: /^[a-zA-Z0-9\s]+$/i,
205
+ message: t('INVALID_ERROR_PRINTER_NICKNAME', 'Invalid Nickname')
206
+ }
207
+ }}
208
+ defaultValue={currentPrinter?.ip ?? ''}
209
+ render={() => (
210
+ <OInput
211
+ placeholder={`${t('EXAMPLE_SHORT', 'Ex:')} ${t('NICKNAME_EXAMPLE_TEXT', 'Kitchen printer')}`}
212
+ placeholderTextColor={theme.colors.arrowColor}
213
+ style={{
214
+ ...styles.inputStyle,
215
+ borderColor: isErrorNickname ? theme.colors.danger500 : theme.colors.tabBar,
216
+ marginBottom: 10
217
+ }}
218
+ value={currentPrinter?.nickname ?? ''}
219
+ selectionColor={theme.colors.primary}
220
+ color={theme.colors.textGray}
221
+ onChange={(value: any) => {
222
+ setValue('nickname', value)
223
+ setCurrentPrinter({
224
+ ...currentPrinter,
225
+ nickname: value
226
+ })
227
+ }}
228
+ />
229
+ )}
230
+ />
231
+ <OText
232
+ size={20}
233
+ style={{ paddingTop: 0, marginBottom: 10 }}
234
+ >
235
+ {`${t('CONNECTION_TYPE', 'Connection type')}:`}
236
+ </OText>
237
+ <WrapperIcon
238
+ activeOpacity={1}
239
+ style={{
240
+ borderColor: currentPrinter?.type === 1 ? theme.colors.primary : theme.colors.textGray
241
+ }}
242
+ onPress={() => {
243
+ setCurrentPrinter({
244
+ ...currentPrinter,
245
+ type: 1,
246
+ ip: '',
247
+ portName: currentPrinter?.portName1
248
+ })
249
+ }}
250
+ >
251
+ <FAIcons
252
+ name='bluetooth'
253
+ size={22}
254
+ {...(currentPrinter?.type === 1 ? { color: theme.colors.primary } : {})}
255
+ style={styles.optionIcons}
256
+ />
257
+ <OText
258
+ size={18}
259
+ style={{ paddingTop: 0 }}
260
+ >
261
+ {t('CONNECTION_VIA_BLUETOOTH', 'Via Bluetooth')}
262
+ </OText>
263
+ </WrapperIcon>
264
+ <WrapperIcon
265
+ activeOpacity={1}
266
+ style={{
267
+ borderColor: currentPrinter?.type === 2 ? theme.colors.primary : theme.colors.textGray
268
+ }}
269
+ onPress={() => setCurrentPrinter({ ...currentPrinter, type: 2 })}
270
+ >
271
+ <MCIcons
272
+ name='access-point-network'
273
+ size={22}
274
+ {...(currentPrinter?.type === 2 ? { color: theme.colors.primary } : {})}
275
+ style={styles.optionIcons}
276
+ />
277
+ <OText
278
+ size={18}
279
+ style={{ paddingTop: 0 }}
280
+ >
281
+ {t('CONNECTION_VIA_LAN', 'Via LAN')}
282
+ </OText>
283
+ </WrapperIcon>
284
+ {currentPrinter?.type === 2 && (
285
+ <>
286
+ <View style={{ flexDirection: 'row' }}>
287
+ <Controller
288
+ control={control}
289
+ name={'ip'}
290
+ rules={{
291
+ required: t('VALIDATION_ERROR_IP_ADDRESS_REQUIRED', 'Ip address is required'),
292
+ pattern: {
293
+ value: /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/i,
294
+ message: t('INVALID_ERROR_IP_ADDRESS', 'Invalid ip address')
295
+ }
296
+ }}
297
+ defaultValue={currentPrinter?.ip ?? ''}
298
+ render={() => (
299
+ <OInput
300
+ placeholder={t('IP_ADDRESS', 'Ip address')}
301
+ placeholderTextColor={theme.colors.arrowColor}
302
+ style={{
303
+ ...styles.inputStyle,
304
+ borderColor: isErrorIp ? theme.colors.danger500 : theme.colors.tabBar
305
+ }}
306
+ value={currentPrinter?.ip ?? ''}
307
+ selectionColor={theme.colors.primary}
308
+ color={theme.colors.textGray}
309
+ onChange={(value: any) => {
310
+ setValue('ip', value)
311
+ setCurrentPrinter({
312
+ ...currentPrinter,
313
+ ip: value
314
+ })
315
+ }}
316
+ />
317
+ )}
318
+ />
319
+ </View>
320
+ <OText
321
+ size={14}
322
+ color={theme.colors.tabBar}
323
+ style={{ paddingTop: 5, paddingLeft: 10 }}
324
+ >
325
+ {`${t('EXAMPLE_SHORT', 'Ex:')} 8.8.8.8`}
326
+ </OText>
327
+ </>
328
+ )}
329
+ </WrapperIcons>
330
+ )}
331
+ </ContainerEdition>
332
+ </Container>
333
+ <View>
334
+ <OButton
335
+ text={t('SAVE_PRINTER', 'Save Printer')}
336
+ imgRightSrc={null}
337
+ textStyle={styles.savePrinterBtnText}
338
+ style={styles.savePrinterBtn}
339
+ bgColor={theme.colors.primary}
340
+ borderColor={theme.colors.primary}
341
+ isDisabled={
342
+ isErrorNickname ||
343
+ !currentPrinter?.model ||
344
+ currentPrinter?.type === 2 && !currentPrinter?.ip
345
+ }
346
+ onClick={() => onSubmit()}
347
+ />
348
+ </View>
349
+ </SafeAreaView>
350
+ )
351
+ }
352
+
353
+ const dropDownIcon = () => {
354
+ const theme = useTheme()
355
+
356
+ return (
357
+ <FeatherIcon
358
+ name='chevron-down'
359
+ size={20}
360
+ color={theme.colors.white}
361
+ />
362
+ )
363
+ }
@@ -0,0 +1,61 @@
1
+ import styled from "styled-components/native";
2
+
3
+ export const ContainerEdition = styled.View`
4
+ margin-bottom: 50px;
5
+ `
6
+
7
+ export const BackArrowWrapper = styled.View`
8
+ align-items: center;
9
+ flex-direction: row;
10
+ min-height: 33px;
11
+ `
12
+
13
+ export const BackArrow = styled.TouchableOpacity`
14
+ border-width: 0;
15
+ width: 32px;
16
+ height: 32px;
17
+ tint-color: ${(props: any) => props.theme.colors.textGray};
18
+ background-color: ${(props: any) => props.theme.colors.clear};
19
+ border-color: ${(props: any) => props.theme.colors.clear};
20
+ shadow-color: ${(props: any) => props.theme.colors.clear};
21
+ padding-left: 0;
22
+ padding-right: 0;
23
+ `
24
+
25
+ export const WrapperHeader = styled.View`
26
+ flex-direction: row;
27
+ justify-content: flex-start;
28
+ align-items: center;
29
+ width: 100%;
30
+ `
31
+
32
+ export const WrapperIcons = styled.View`
33
+ flex-direction: column;
34
+ justify-content: flex-start;
35
+ margin-top: 20px;
36
+ `
37
+
38
+ export const WrapperIcon = styled.TouchableOpacity`
39
+ flex-direction: row;
40
+ justify-content: flex-start;
41
+ padding: 8px;
42
+ border-width: 1px;
43
+ border-radius: 8px;
44
+ margin-bottom: 10px;
45
+ `
46
+
47
+ export const ContainerList = styled.View`
48
+ flex-direction: row;
49
+ justify-content: space-between;
50
+ width: 100%;
51
+ padding: 5px 5px 5px 0;
52
+ border-bottom-width: 1px;
53
+ border-bottom-color: ${(props: any) => props.theme.colors.lightGray};
54
+ `
55
+
56
+ export const EnabledAutoPrint = styled.View`
57
+ flex-direction: row;
58
+ justify-content: space-between;
59
+ align-items: center;
60
+ padding: 20px 0px 10px;
61
+ `;