ordering-ui-react-native 0.22.42 → 0.22.43-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 -8
  2. package/src/DeliveryApp.tsx +1 -1
  3. package/src/components/BusinessesListing/index.tsx +1 -1
  4. package/src/components/Checkout/index.tsx +40 -39
  5. package/src/components/VerifyPhone/styles.tsx +1 -2
  6. package/src/context/OfflineActions/index.tsx +236 -0
  7. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +9 -6
  8. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
  9. package/themes/business/src/components/BusinessController/index.tsx +8 -3
  10. package/themes/business/src/components/BusinessProductList/index.tsx +3 -2
  11. package/themes/business/src/components/Chat/index.tsx +15 -3
  12. package/themes/business/src/components/DriverMap/index.tsx +44 -33
  13. package/themes/business/src/components/FloatingButton/index.tsx +3 -2
  14. package/themes/business/src/components/LanguageSelector/index.tsx +1 -1
  15. package/themes/business/src/components/LoginForm/index.tsx +123 -98
  16. package/themes/business/src/components/LogoutButton/index.tsx +14 -5
  17. package/themes/business/src/components/MapView/index.tsx +42 -22
  18. package/themes/business/src/components/NewOrderNotification/index.tsx +38 -19
  19. package/themes/business/src/components/OrderDetails/Business.tsx +34 -16
  20. package/themes/business/src/components/OrderDetails/Delivery.tsx +134 -53
  21. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +155 -45
  22. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +51 -28
  23. package/themes/business/src/components/OrderDetails/styles.tsx +39 -3
  24. package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +17 -16
  25. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +3 -2
  26. package/themes/business/src/components/OrderSummary/index.tsx +6 -4
  27. package/themes/business/src/components/OrdersListManager/index.tsx +13 -1
  28. package/themes/business/src/components/OrdersOption/index.tsx +332 -231
  29. package/themes/business/src/components/OrdersOption/styles.tsx +14 -0
  30. package/themes/business/src/components/PreviousMessages/index.tsx +26 -3
  31. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +29 -18
  32. package/themes/business/src/components/PreviousOrders/index.tsx +74 -66
  33. package/themes/business/src/components/PreviousOrders/styles.tsx +2 -1
  34. package/themes/business/src/components/PrinterEdition/MessageAlert.tsx +33 -0
  35. package/themes/business/src/components/PrinterEdition/index.tsx +310 -97
  36. package/themes/business/src/components/PrinterEdition/printerList.tsx +23 -0
  37. package/themes/business/src/components/PrinterSettings/index.tsx +101 -90
  38. package/themes/business/src/components/PrinterSettings/styles.tsx +9 -0
  39. package/themes/business/src/components/ProductItemAccordion/index.tsx +3 -2
  40. package/themes/business/src/components/ReviewCustomer/index.tsx +2 -0
  41. package/themes/business/src/components/StoresList/index.tsx +2 -2
  42. package/themes/business/src/components/UserProfileForm/index.tsx +48 -10
  43. package/themes/business/src/components/UserProfileForm/styles.tsx +7 -0
  44. package/themes/business/src/components/WebsocketStatus/index.tsx +2 -2
  45. package/themes/business/src/components/shared/OTextarea.tsx +8 -9
  46. package/themes/business/src/config/currency.tsx +1010 -0
  47. package/themes/business/src/hooks/useLocation.tsx +16 -12
  48. package/themes/business/src/layouts/SafeAreaContainer.tsx +35 -19
  49. package/themes/business/src/types/index.tsx +22 -7
  50. package/themes/business/src/utils/index.tsx +28 -3
  51. package/themes/doordash/src/components/BusinessesListing/index.tsx +1 -1
  52. package/themes/doordash/src/components/LoginForm/index.tsx +1 -2
  53. package/themes/instacart/src/components/BusinessesListing/index.tsx +1 -1
  54. package/themes/kiosk/src/components/Checkout/index.tsx +9 -5
  55. package/themes/kiosk/src/components/CustomerName/index.tsx +1 -1
  56. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  57. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  58. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  59. package/themes/kiosk/src/components/PaymentOptions/index.tsx +121 -57
  60. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  61. package/themes/original/index.tsx +9 -1
  62. package/themes/original/src/components/AddressForm/index.tsx +25 -17
  63. package/themes/original/src/components/AddressList/index.tsx +8 -7
  64. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  65. package/themes/original/src/components/BusinessBasicInformation/index.tsx +1 -1
  66. package/themes/original/src/components/BusinessItemAccordion/index.tsx +14 -6
  67. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +103 -92
  68. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +8 -6
  69. package/themes/original/src/components/BusinessListingSearch/index.tsx +1 -2
  70. package/themes/original/src/components/BusinessPreorder/index.tsx +46 -28
  71. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +73 -70
  72. package/themes/original/src/components/BusinessProductsList/index.tsx +6 -7
  73. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  74. package/themes/original/src/components/BusinessProductsListing/index.tsx +10 -6
  75. package/themes/original/src/components/BusinessTypeFilter/index.tsx +9 -8
  76. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -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 +49 -15
  80. package/themes/original/src/components/CartContent/index.tsx +2 -4
  81. package/themes/original/src/components/Checkout/index.tsx +127 -79
  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 +35 -19
  97. package/themes/original/src/components/LoginForm/Otp/index.tsx +0 -3
  98. package/themes/original/src/components/LoginForm/index.tsx +13 -10
  99. package/themes/original/src/components/MessageListing/index.tsx +2 -1
  100. package/themes/original/src/components/Messages/index.tsx +20 -13
  101. package/themes/original/src/components/MomentOption/TimeListItem.tsx +56 -0
  102. package/themes/original/src/components/MomentOption/index.tsx +80 -52
  103. package/themes/original/src/components/MomentSelector/index.tsx +5 -2
  104. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +7 -4
  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 +16 -11
  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 +4 -3
  116. package/themes/original/src/components/OrderSummary/index.tsx +32 -11
  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 +462 -461
  122. package/themes/original/src/components/PhoneInputNumber/index.tsx +92 -7
  123. package/themes/original/src/components/PlaceSpot/index.tsx +1 -3
  124. package/themes/original/src/components/PreviousOrders/index.tsx +1 -2
  125. package/themes/original/src/components/ProductForm/ActionButton.tsx +7 -12
  126. package/themes/original/src/components/ProductForm/index.tsx +107 -102
  127. package/themes/original/src/components/ProductItemAccordion/index.tsx +30 -38
  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 +2 -2
  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 +44 -32
  138. package/themes/original/src/components/SingleOrderCard/index.tsx +6 -4
  139. package/themes/original/src/components/SingleProductCard/index.tsx +5 -5
  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 +16 -3
  143. package/themes/original/src/components/StripeElementsForm/index.tsx +8 -4
  144. package/themes/original/src/components/StripeElementsForm/naked.tsx +1 -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 +8 -5
  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 +102 -74
  151. package/themes/original/src/components/UserProfile/index.tsx +9 -1
  152. package/themes/original/src/components/UserVerification/index.tsx +15 -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 +12 -4
  160. package/themes/original/src/utils/index.tsx +29 -0
  161. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -2,14 +2,13 @@ import React, { useEffect, useState } from 'react'
2
2
  import { StyleSheet, TouchableOpacity, View, Dimensions } from 'react-native'
3
3
  import SimpleLineIcons from 'react-native-vector-icons/SimpleLineIcons'
4
4
  import FeatherIcon from 'react-native-vector-icons/Feather'
5
- import MCIcons from 'react-native-vector-icons/MaterialCommunityIcons'
6
5
  import { useTheme } from 'styled-components/native'
7
6
  import ToggleSwitch from 'toggle-switch-react-native';
8
7
  import { useLanguage } from 'ordering-components/native'
9
8
 
10
9
  import { _setStoreData, _retrieveStoreData } from '../../providers/StoreUtil'
11
- import { Container, ContainerList, EnabledAutoPrint } from './styles'
12
- import { OText, OIcon, OModal } from '../shared'
10
+ import { Container, ContainerList, EnabledAutoPrint, NoPrintersContainer } from './styles'
11
+ import { OText, OIcon, OModal, OButton } from '../shared'
13
12
  import { PrinterEdition } from '../PrinterEdition'
14
13
 
15
14
  export const PrinterSettings = (props: any) => {
@@ -17,9 +16,10 @@ export const PrinterSettings = (props: any) => {
17
16
 
18
17
  const [printers, setPrinters] = useState<any>({ list: [] })
19
18
  const [autoPrintEnabled, setAutoPrintEnabled] = useState<boolean>(false)
20
- const [openModal, setOpenModal] = useState({ open: false, data: null })
19
+ const [openModal, setOpenModal] = useState<any>({ open: false, data: null })
21
20
 
22
21
  const WIDTH_SCREEN = Dimensions.get('window').width
22
+ const HEIGHT_SCREEN = Dimensions.get('window').height
23
23
 
24
24
  const [, t] = useLanguage()
25
25
  const theme = useTheme()
@@ -40,7 +40,7 @@ export const PrinterSettings = (props: any) => {
40
40
  wIconContainer: {
41
41
  flexDirection: 'row',
42
42
  alignItems: 'center',
43
- width: WIDTH_SCREEN - 60 - 10 - 26
43
+ width: WIDTH_SCREEN - 40 - 22 - 22 - 10, // screen - margin - icon - icon - marginIcon
44
44
  },
45
45
  wrapperContainer: {
46
46
  flexDirection: 'column',
@@ -55,9 +55,6 @@ export const PrinterSettings = (props: any) => {
55
55
  borderWidth: 1,
56
56
  borderRadius: 8,
57
57
  },
58
- label: {
59
- color: theme.colors.textGray
60
- },
61
58
  btnBackArrow: {
62
59
  borderWidth: 0,
63
60
  width: 32,
@@ -74,40 +71,28 @@ export const PrinterSettings = (props: any) => {
74
71
  flexDirection: 'row',
75
72
  minHeight: 33,
76
73
  },
74
+ addButtonText: {
75
+ color: theme.colors.inputTextColor,
76
+ fontSize: 16,
77
+ },
78
+ addButton: {
79
+ height: 40,
80
+ marginTop: 10,
81
+ borderRadius: 8,
82
+ marginRight: 10,
83
+ marginBottom: 10,
84
+ },
77
85
  })
78
86
 
79
- const printerList = [
80
- { model: 'mPOP', emulation: 'StarPRNT', portName1: 'BT:mPOP', type: 1, ip: '', printMode: 'append' },
81
- { model: 'FVP10', emulation: 'StarLine', portName1: 'BT:FVP10', type: 1, ip: '', printMode: 'append' },
82
- { model: 'TSP100', emulation: 'StarGraphic', portName1: 'BT:TSP100', type: 1, ip: '', printMode: 'appendBitmapText' },
83
- { model: 'TSP100IV', emulation: 'StarLine', portName1: 'BT:TSP100iv', type: 1, ip: '', printMode: 'append' },
84
- { model: 'TSP65011', emulation: 'StarLine', portName1: 'BT:TSP65011', type: 1, ip: '', printMode: 'append' },
85
- { model: 'TSP7001', emulation: 'StarLine', portName1: 'BT:TSP7001', type: 1, ip: '', printMode: 'append' },
86
- { model: 'TSP80011', emulation: 'StarLine', portName1: 'BT:TSP80011', type: 1, ip: '', printMode: 'append' },
87
- { model: 'SP700', emulation: 'StarDotImpact', portName1: 'BT:SP700', type: 1, ip: '', printMode: 'append' },
88
- { model: 'SM-S210i', emulation: 'EscPosMobile', portName1: 'BT:SMS210i', type: 1, ip: '', printMode: 'append' },
89
- { model: 'SM-S220i', emulation: 'EscPosMobile', portName1: 'BT:SMS220i', type: 1, ip: '', printMode: 'append' },
90
- { model: 'SM-S230i', emulation: 'EscosMobile', portName1: 'BT:SMS230i', type: 1, ip: '', printMode: 'append' },
91
- { model: 'SM-T300i/T300', emulation: 'EscPosMobile', portName1: 'BT:SMT300i/T300', type: 1, ip: '', printMode: 'append' },
92
- { model: 'SM-T400i', emulation: 'EscosMobile', portName1: 'BT:SMT400i', type: 1, ip: '', printMode: 'append' },
93
- { model: 'SM-L200', emulation: 'StarPRNT', portName1: 'BT:SML200', type: 1, ip: '', printMode: 'append' },
94
- { model: 'SM-L300', emulation: 'StarPRNT', portName1: 'BT:SML300', type: 1, ip: '', printMode: 'append' },
95
- { model: 'BSC10', emulation: 'EscPos', portName1: 'BT:BSC10', type: 1, ip: '', printMode: 'append' },
96
- { model: 'SM-S210i StarPRNT', emulation: 'StarPRNT', portName1: 'BT:SMS210i', type: 1, ip: '', printMode: 'append' },
97
- { model: 'SM-S220i StarPRNT', emulation: 'StarPRNT', portName1: 'BT:SMS220i', type: 1, ip: '', printMode: 'append' },
98
- { model: 'SM-S230i StarPRNT', emulation: 'StarPRNT', portName1: 'BT:SMS230i', type: 1, ip: '', printMode: 'append' },
99
- { model: 'SM-T300i/T300 StarPRNT', emulation: 'StarPRNT', portName1: 'BT:SMT300i', type: 1, ip: '', printMode: 'append' },
100
- { model: 'SM-T400i StarPRNT', emulation: 'StarPRNT', portName1: 'BT:SMT400i', type: 1, ip: '', printMode: 'append' },
101
- ]
102
-
103
87
  const goToBack = () => navigation?.canGoBack() && navigation.goBack()
104
88
 
105
- const handleClick = async ({ item, type, ip, edit }: any) => {
89
+ const handleClick = async ({ item, type, ip, edit, isAdd, index }: any) => {
106
90
  let _item = item
91
+ const action = edit || isAdd
107
92
  let _printers = printers.list
108
- const idx = _printers.findIndex((p: any) => p.model === _item.model)
93
+ const idx = index ?? _printers.findIndex((p: any) => p.model === _item.model)
109
94
 
110
- if (idx !== -1 && !edit) {
95
+ if (idx !== -1 && !action) {
111
96
  _printers.splice(idx, 1);
112
97
  } else {
113
98
  const _currentPrinter = _printers.find((p: any) => p.model === _item?.model)
@@ -117,7 +102,7 @@ export const PrinterSettings = (props: any) => {
117
102
  type: type ?? _currentPrinter?.type ?? 1,
118
103
  ip: ip ?? _currentPrinter?.ip ?? '',
119
104
  portName: (type ?? _currentPrinter?.type) === 1 || !ip
120
- ? item.portName1 ?? _currentPrinter?.portName1
105
+ ? item?.bt ?? item.portName1 ?? _currentPrinter?.portName1
121
106
  : `TCP:${ip}`
122
107
  }
123
108
  edit ? (_printers[idx] = _item) : _printers.push(_item)
@@ -154,43 +139,50 @@ export const PrinterSettings = (props: any) => {
154
139
  <OText size={24} style={{ paddingTop: 0 }}>
155
140
  {t('PRINTER_SETTINGS', 'Printer Settings')}
156
141
  </OText>
157
- <EnabledAutoPrint>
158
- <View style={{ flex: 1 }}>
159
- <OText
160
- numberOfLines={2}
161
- adjustsFontSizeToFit
162
- style={{ ...styles.label, paddingHorizontal: 0 }}>
163
- {t('AUTO_PRINT_AFTER_ACCEPTING_ORDER', 'Auto print after accepting order')}
164
- </OText>
165
- </View>
166
- <ToggleSwitch
167
- isOn={autoPrintEnabled}
168
- onColor={theme.colors.primary}
169
- offColor={theme.colors.offColor}
170
- size="small"
171
- onToggle={() => handleAutoPrint()}
172
- animationSpeed={200}
142
+ {!!printers.list.length && (
143
+ <EnabledAutoPrint>
144
+ <View style={{ flex: 1 }}>
145
+ <OText
146
+ numberOfLines={2}
147
+ adjustsFontSizeToFit
148
+ color={theme.colors.textGray}
149
+ style={{ paddingHorizontal: 0 }}>
150
+ {t('AUTO_PRINT_AFTER_ACCEPTING_ORDER', 'Auto print after accepting order')}
151
+ </OText>
152
+ </View>
153
+ <ToggleSwitch
154
+ isOn={autoPrintEnabled}
155
+ onColor={theme.colors.primary}
156
+ offColor={theme.colors.offColor}
157
+ size="small"
158
+ onToggle={() => handleAutoPrint()}
159
+ animationSpeed={200}
160
+ />
161
+ </EnabledAutoPrint>
162
+ )}
163
+ {!!printers.list.length && (
164
+ <OButton
165
+ text={t('ADD_PRINTER', 'Add printer')}
166
+ imgRightSrc={null}
167
+ textStyle={styles.addButtonText}
168
+ style={styles.addButton}
169
+ bgColor={theme.colors.primary}
170
+ borderColor={theme.colors.primary}
171
+ onClick={() => setOpenModal({ open: true, data: null })}
173
172
  />
174
- </EnabledAutoPrint>
173
+ )}
175
174
  <View>
176
- {printerList.map((item: any, i: number) => (
175
+ {printers.list.map((item: any, i: number) => (
177
176
  <ContainerList
178
177
  key={i}
179
178
  activeOpacity={1}
180
- onPress={() => handleClick({ item })}
181
179
  >
182
180
  <View style={styles.wrapperContainer}>
183
181
  <View style={{ flexDirection: 'row', alignItems: 'center' }}>
184
- <MCIcons
185
- name={printers.list.find((p: any) => p?.model === item.model) ? "checkbox-marked" : "checkbox-blank-outline"}
186
- size={26}
187
- color={theme.colors.primary}
188
- onPress={() => handleClick({ item })}
189
- />
190
182
  <TouchableOpacity
191
183
  activeOpacity={1}
192
184
  style={styles.wIconContainer}
193
- onPress={() => handleClick({ item })}
185
+ onPress={() => setOpenModal({ open: true, data: { ...item, index: i} })}
194
186
  >
195
187
  <SimpleLineIcons
196
188
  name='printer'
@@ -198,55 +190,74 @@ export const PrinterSettings = (props: any) => {
198
190
  size={18}
199
191
  style={{
200
192
  ...styles.icons,
201
- color: printers.list.find((p: any) => p?.model === item.model)
202
- ? theme.colors.primary
203
- : theme.colors.textGray
193
+ color: theme.colors.primary
204
194
  }}
205
195
  />
206
196
  <OText
207
197
  size={18}
208
- color={printers.list.find((p: any) => p?.model === item.model)
209
- ? theme.colors.primary
210
- : theme.colors.textGray
211
- }
198
+ color={theme.colors.primary}
212
199
  >
213
- {item.model}
200
+ {item?.nickname ?? item.model}
214
201
  </OText>
215
202
  </TouchableOpacity>
216
- {!!printers.list.find((p: any) => p?.model === item.model) && (
217
- <TouchableOpacity
218
- activeOpacity={1}
219
- onPress={() => setOpenModal({
220
- open: true,
221
- data: printers.list.find((p: any) => p?.model === item.model)
222
- })}
223
- style={{ width: 40 }}
224
- >
225
- <FeatherIcon
226
- name='edit'
227
- size={20}
228
- style={styles.icons}
229
- />
230
- </TouchableOpacity>
231
- )}
203
+ <TouchableOpacity
204
+ activeOpacity={1}
205
+ onPress={() => setOpenModal({ open: true, data: { ...item, index: i} })}
206
+ >
207
+ <FeatherIcon
208
+ name='edit'
209
+ size={22}
210
+ />
211
+ </TouchableOpacity>
212
+ <TouchableOpacity
213
+ activeOpacity={1}
214
+ onPress={() => handleClick({ item })}
215
+ style={{ marginLeft: 10 }}
216
+ >
217
+ <FeatherIcon
218
+ name='trash-2'
219
+ size={22}
220
+ color={theme.colors.danger500}
221
+ />
222
+ </TouchableOpacity>
232
223
  </View>
233
224
  </View>
234
225
  </ContainerList>
235
226
  ))}
227
+ {!printers.list.length && (
228
+ <NoPrintersContainer style={{ height: HEIGHT_SCREEN/2 }}>
229
+ <OText
230
+ size={20}
231
+ color={theme.colors.textGray}
232
+ numberOfLines={2}
233
+ adjustsFontSizeToFit
234
+ style={{ paddingHorizontal: 0, opacity: 0.4 }}
235
+ >
236
+ {t('NO_PRINTERS_CONFIGURED', 'No printers configured')}
237
+ </OText>
238
+ <OButton
239
+ text={t('ADD_PRINTER', 'Add printer')}
240
+ imgRightSrc={null}
241
+ textStyle={styles.addButtonText}
242
+ style={styles.addButton}
243
+ bgColor={theme.colors.primary}
244
+ borderColor={theme.colors.primary}
245
+ onClick={() => setOpenModal({ open: true, data: null })}
246
+ />
247
+ </NoPrintersContainer>
248
+ )}
236
249
  </View>
237
250
  <OModal
238
251
  hideIcons
239
252
  entireModal
240
253
  customClose
241
254
  open={openModal.open}
242
- style={{
243
- paddingTop: 0,
244
- marginTop: 0
245
- }}
255
+ style={{ paddingTop: 0, marginTop: 0 }}
246
256
  onClose={() => setOpenModal({ open: false, data: null })}
247
257
  >
248
258
  <PrinterEdition
249
259
  printer={openModal.data}
260
+ printersList={printers}
250
261
  handleChangePrinter={handleClick}
251
262
  onClose={() => setOpenModal({ open: false, data: null })}
252
263
  />
@@ -19,3 +19,12 @@ export const EnabledAutoPrint = styled.View`
19
19
  align-items: center;
20
20
  padding: 20px 0px 10px;
21
21
  `;
22
+
23
+ export const NoPrintersContainer = styled.View`
24
+ flex-direction: column;
25
+ align-items: center;
26
+ justify-content: center;
27
+ margin-top: 40px;
28
+ height: 100%;
29
+ flex: 1;
30
+ `
@@ -22,6 +22,7 @@ import {
22
22
  } from './styles';
23
23
  import { OText, OAlert } from '../shared';
24
24
  import { ProductItemAccordionParams } from '../../types';
25
+ import { getCurrenySymbol } from '../../utils';
25
26
 
26
27
  export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
27
28
  const {
@@ -160,7 +161,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
160
161
  }}>
161
162
  <View style={{ flexDirection: 'row' }}>
162
163
  <OText size={12} color={theme.colors.textGray}>
163
- {parsePrice(getProductPrice(product), { currency })}
164
+ {parsePrice(getProductPrice(product), { currency: getCurrenySymbol(currency) })}
164
165
  </OText>
165
166
 
166
167
  {(
@@ -281,7 +282,7 @@ export const ProductItemAccordion = (props: ProductItemAccordionParams) => {
281
282
  suboption.position,
282
283
  )
283
284
  : '',
284
- price: parsePrice(suboption.price, { currency }),
285
+ price: parsePrice(suboption.price, { currency: getCurrenySymbol(currency) }),
285
286
  })}
286
287
  </OText>
287
288
  </ProductSubOption>
@@ -1,3 +1,5 @@
1
+
2
+
1
3
  import React, { useState, useEffect, useRef } from 'react'
2
4
  import {
3
5
  useLanguage,
@@ -149,10 +149,10 @@ const StoresListUI = (props: BusinessesListingParams) => {
149
149
  width={12}
150
150
  height={12}
151
151
  color={theme.colors.skyBlue}
152
- style={{ marginRight: 5, marginTop: 3 }}
152
+ style={{ marginRight: 5 }}
153
153
  />
154
154
  <OText size={12}>
155
- {t('MORE_SETTINGS_GO_TO', 'For more settings go to')}{' '}
155
+ {t('MORE_SETTINGS_GO_TO', 'For more settings go to ')}
156
156
  </OText>
157
157
  <TouchableOpacity onPress={() => { Linking.openURL(t('LINK_MORE_SETTINGS_GO_TO', 'https://app.ordering.co')) }}>
158
158
  <OText size={12} color={theme.colors.skyBlue}>
@@ -1,5 +1,6 @@
1
1
  import React, { useEffect, useState } from 'react';
2
2
  import { View, StyleSheet, ScrollView, ActivityIndicator, Pressable } from 'react-native';
3
+ import { _retrieveStoreData, _clearStoreData } from '../../providers/StoreUtil';
3
4
  import { useForm } from 'react-hook-form';
4
5
  import { launchImageLibrary } from 'react-native-image-picker';
5
6
  import { Placeholder, PlaceholderLine, Fade } from 'rn-placeholder';
@@ -20,6 +21,7 @@ import {
20
21
  UserData,
21
22
  EditButton,
22
23
  EnabledStatusDriver,
24
+ RemoveAccount
23
25
  } from './styles';
24
26
  import { LogoutButton } from '../LogoutButton';
25
27
  import { LanguageSelector } from '../LanguageSelector';
@@ -36,6 +38,8 @@ import {
36
38
  OInput,
37
39
  OModal,
38
40
  } from '../../components/shared';
41
+ import { OAlert } from '../../../../../src/components/shared'
42
+
39
43
  import { sortInputFields, getTraduction } from '../../utils';
40
44
  import { ProfileParams } from '../../types';
41
45
  import { NotFoundSource } from '../NotFoundSource';
@@ -49,6 +53,7 @@ const ProfileUI = (props: ProfileParams) => {
49
53
  toggleIsEdit,
50
54
  cleanFormState,
51
55
  handleToggleAvalaibleStatusDriver,
56
+ handleRemoveAccount,
52
57
  isAlsea,
53
58
  isShowDriverStatus,
54
59
  navigation
@@ -62,6 +67,7 @@ const ProfileUI = (props: ProfileParams) => {
62
67
  const [{ loading }, { loadOriginalValidationFields }] = useValidationFields()
63
68
  const { errors } = useForm();
64
69
  const theme = useTheme();
70
+ const [confirm, setConfirm] = useState<any>({ open: false, content: null, handleOnAccept: null, id: null, title: null })
65
71
 
66
72
  const [phoneInputData, setPhoneInputData] = useState<any>({
67
73
  error: '',
@@ -76,13 +82,8 @@ const ProfileUI = (props: ProfileParams) => {
76
82
  const [phoneToShow, setPhoneToShow] = useState('');
77
83
  const [openModal, setOpenModal] = useState(false)
78
84
  const allowDriverUpdateData = user?.level !== 4 || configs?.allow_driver_update_data?.value === "1"
79
- useEffect(() => {
80
- if (phoneInputData.phone.cellphone) {
81
- const codeNumberPhone = phoneInputData.phone.country_phone_code
82
- const numberPhone = phoneInputData.phone.cellphone
83
- setPhoneToShow(`(${codeNumberPhone}) ${numberPhone}`);
84
- }
85
- }, [phoneInputData.phone.cellphone]);
85
+ const allowDeleteDriverAccount = user?.level !== 4 || configs?.allow_delete_driver_account?.value === "1"
86
+ const isAdmin = user?.level === 0
86
87
 
87
88
  const setUserCellPhone = (isEdit = false) => {
88
89
  if (userPhoneNumber && !userPhoneNumber.includes('null') && !isEdit) {
@@ -148,6 +149,28 @@ const ProfileUI = (props: ProfileParams) => {
148
149
  });
149
150
  };
150
151
 
152
+ const onRemoveAccount = async () => {
153
+ setConfirm({
154
+ open: true,
155
+ content: [t('QUESTION_REMOVE_ACCOUNT', 'Are you sure that you want to remove your account?')],
156
+ title: t('ACCOUNT_ALERT', 'Account alert'),
157
+ handleOnAccept: () => {
158
+ setConfirm({ ...confirm, open: false })
159
+ handleRemoveAccount && handleRemoveAccount(user?.id)
160
+ _clearStoreData({ excludedKeys: ['isTutorial', 'language'] });
161
+ props?.setRootState && props?.setRootState({ isAuth: false, token: null })
162
+ }
163
+ })
164
+ }
165
+
166
+ useEffect(() => {
167
+ if (phoneInputData.phone.cellphone) {
168
+ const codeNumberPhone = phoneInputData.phone.country_phone_code
169
+ const numberPhone = phoneInputData.phone.cellphone
170
+ setPhoneToShow(`(${codeNumberPhone}) ${numberPhone}`);
171
+ }
172
+ }, [phoneInputData.phone.cellphone]);
173
+
151
174
  useEffect(() => {
152
175
  const isLoadingDriver = userState?.loadingDriver ?? true;
153
176
 
@@ -155,8 +178,8 @@ const ProfileUI = (props: ProfileParams) => {
155
178
  if (userState?.result?.error) {
156
179
  const messageError =
157
180
  userState.result.error || userState.result.error[0];
158
- showToast(ToastType.Error, getTraduction(messageError, t));
159
- } else {
181
+ showToast(ToastType.Error, typeof messageError === 'string' ? getTraduction(messageError, t) : t('CANNOT_UPDATE_AVAILABLE_STATE', 'Cannot update available state'));
182
+ } else {
160
183
  showToast(
161
184
  ToastType.Success,
162
185
  t('AVAILABLE_STATE_IS_UPDATED', 'Available state is updated'),
@@ -486,10 +509,11 @@ const ProfileUI = (props: ProfileParams) => {
486
509
  handleCancelEdit={handleCancelEdit}
487
510
  toggleIsEdit={toggleIsEdit}
488
511
  isAlsea={isAlsea}
512
+ allowDriverUpdateData={allowDriverUpdateData}
489
513
  />
490
514
  </View>
491
515
  )}
492
- {!validationFields.loading && !isEdit && allowDriverUpdateData && (
516
+ {!validationFields.loading && !isEdit && (
493
517
  <EditButton>
494
518
  <OButton
495
519
  text={t('EDIT', 'Edit')}
@@ -544,6 +568,12 @@ const ProfileUI = (props: ProfileParams) => {
544
568
 
545
569
  <LogoutButton />
546
570
  </Actions>
571
+ {allowDeleteDriverAccount && (
572
+ <RemoveAccount disabled={isAdmin} onPress={() => onRemoveAccount()} activeOpacity={0.7}>
573
+ <AntDesignIcon size={16} name='close' color={theme.colors.textNormal} style={{ marginEnd: 14 }} />
574
+ <OText size={14} lineHeight={24} weight={'400'} style={{ opacity: isAdmin ? 0.5 : 1 }} color={theme.colors.danger500}>{t('REMOVE_ACCOUNT', 'Remove account')}</OText>
575
+ </RemoveAccount>
576
+ )}
547
577
  <OModal
548
578
  open={openModal}
549
579
  onClose={() => setOpenModal(false)}
@@ -554,6 +584,14 @@ const ProfileUI = (props: ProfileParams) => {
554
584
  <DriverSchedule schedule={user?.schedule} />
555
585
  )}
556
586
  </OModal>
587
+ <OAlert
588
+ open={confirm.open}
589
+ title={confirm.title}
590
+ content={confirm.content}
591
+ onAccept={confirm.handleOnAccept}
592
+ onCancel={() => setConfirm({ ...confirm, open: false, title: null })}
593
+ onClose={() => setConfirm({ ...confirm, open: false, title: null })}
594
+ />
557
595
  </ScrollView>
558
596
  )}
559
597
  </>
@@ -34,3 +34,10 @@ export const Actions = styled.View`
34
34
  justify-content: space-between;
35
35
  align-items: flex-start;
36
36
  `;
37
+
38
+ export const RemoveAccount = styled.TouchableOpacity`
39
+ flex-direction: row;
40
+ justify-content: flex-start;
41
+ align-items: center;
42
+ margin-bottom: 24px;
43
+ `
@@ -1,6 +1,6 @@
1
1
  import React, { useState } from 'react'
2
2
  import { useLanguage, useUtils, WebsocketStatus as WebsocketStatusController } from 'ordering-components/native'
3
- import { TouchableOpacity, View, StyleSheet } from 'react-native'
3
+ import { TouchableOpacity, View, StyleSheet, Platform } from 'react-native'
4
4
  import MaterialIcon from 'react-native-vector-icons/MaterialCommunityIcons';
5
5
  import { useTheme } from 'styled-components/native'
6
6
  import RNRestart from 'react-native-restart'
@@ -37,7 +37,7 @@ const SocketStatusUI = (props: any) => {
37
37
  paddingLeft: 0,
38
38
  paddingRight: 0,
39
39
  marginBottom: 30,
40
- marginTop: 30
40
+ marginTop: Platform.OS === 'ios' ? 60 : 30
41
41
  },
42
42
  })
43
43
 
@@ -4,8 +4,10 @@ import { useTheme } from 'styled-components/native';
4
4
 
5
5
  const Wrapper = styled.View`
6
6
  border-radius: 10px;
7
- border: 1px solid ${(props: any) => props.theme.colors.lightGray};
7
+ border-width: 1px;
8
+ border-color: ${(props: any) => props.theme.colors.lightGray};
8
9
  `;
10
+
9
11
  const Inner = styled.TextInput`
10
12
  height: 100px;
11
13
  padding: 5px 10px 5px 10px;
@@ -29,16 +31,13 @@ const OTextarea = (props: Props) => {
29
31
  ref={props.textTareaRef}
30
32
  onFocus={() => props.onFocus()}
31
33
  onChangeText={(txt: any) => props.onChange(txt)}
32
- textAlignVertical={'top'}
33
34
  placeholder={props.placeholder}
34
- placeholderTextColor={theme.colors.arrowColor}
35
- numberOfLines={props.lines}
36
- underlineColorAndroid={'transparent'}
37
- value={props.value}
35
+ placeholderTextColor={theme.colors.lightGray}
36
+ numberOfLines={props.lines}
37
+ underlineColorAndroid={'transparent'}
38
+ value={props.value}
39
+ multiline={true}
38
40
  autoFocus={props.autoFocus}
39
- multiline={true}
40
- selectionColor={theme.colors.primary}
41
- color={theme.colors.textGray}
42
41
  />
43
42
  </Wrapper>
44
43
  );