ordering-ui-react-native 0.22.53 → 0.22.54-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 (129) hide show
  1. package/package.json +5 -7
  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/src/providers/AlertProvider.tsx +3 -1
  8. package/themes/business/src/components/AcceptOrRejectOrder/index.tsx +9 -6
  9. package/themes/business/src/components/AcceptOrRejectOrder/styles.tsx +1 -0
  10. package/themes/business/src/components/BusinessController/index.tsx +8 -3
  11. package/themes/business/src/components/BusinessProductList/index.tsx +3 -2
  12. package/themes/business/src/components/Chat/index.tsx +15 -3
  13. package/themes/business/src/components/DriverMap/index.tsx +44 -33
  14. package/themes/business/src/components/FloatingButton/index.tsx +3 -2
  15. package/themes/business/src/components/LanguageSelector/index.tsx +1 -1
  16. package/themes/business/src/components/LoginForm/index.tsx +123 -98
  17. package/themes/business/src/components/LogoutButton/index.tsx +13 -4
  18. package/themes/business/src/components/MapView/index.tsx +22 -17
  19. package/themes/business/src/components/NewOrderNotification/index.tsx +25 -14
  20. package/themes/business/src/components/OrderDetails/Business.tsx +56 -20
  21. package/themes/business/src/components/OrderDetails/Delivery.tsx +134 -53
  22. package/themes/business/src/components/OrderDetails/OrderContentComponent.tsx +155 -45
  23. package/themes/business/src/components/OrderDetails/OrderHeaderComponent.tsx +51 -28
  24. package/themes/business/src/components/OrderDetails/styles.tsx +39 -3
  25. package/themes/business/src/components/OrderDetails/usePrinterCommands.tsx +17 -16
  26. package/themes/business/src/components/OrderDetailsLogistic/index.tsx +3 -2
  27. package/themes/business/src/components/OrderSummary/index.tsx +271 -176
  28. package/themes/business/src/components/OrdersListManager/index.tsx +13 -1
  29. package/themes/business/src/components/OrdersOption/index.tsx +345 -231
  30. package/themes/business/src/components/OrdersOption/styles.tsx +14 -0
  31. package/themes/business/src/components/PreviousMessages/index.tsx +26 -3
  32. package/themes/business/src/components/PreviousOrders/OrderItem.tsx +30 -18
  33. package/themes/business/src/components/PreviousOrders/index.tsx +74 -66
  34. package/themes/business/src/components/PreviousOrders/styles.tsx +2 -1
  35. package/themes/business/src/components/PrinterEdition/MessageAlert.tsx +33 -0
  36. package/themes/business/src/components/PrinterEdition/index.tsx +143 -75
  37. package/themes/business/src/components/PrinterEdition/printerList.tsx +23 -0
  38. package/themes/business/src/components/PrinterSettings/index.tsx +1 -1
  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/config/currency.tsx +1010 -0
  46. package/themes/business/src/hooks/useLocation.tsx +16 -12
  47. package/themes/business/src/layouts/SafeAreaContainer.tsx +35 -19
  48. package/themes/business/src/types/index.tsx +22 -7
  49. package/themes/business/src/utils/index.tsx +28 -3
  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 +9 -5
  54. package/themes/kiosk/src/components/CustomerName/index.tsx +1 -1
  55. package/themes/kiosk/src/components/NavBar/index.tsx +14 -14
  56. package/themes/kiosk/src/components/OptionCard/index.tsx +1 -1
  57. package/themes/kiosk/src/components/OrderTypeCardSelector/index.tsx +8 -10
  58. package/themes/kiosk/src/components/PaymentOptions/index.tsx +121 -57
  59. package/themes/kiosk/src/components/shared/OButton.tsx +5 -18
  60. package/themes/original/index.tsx +9 -1
  61. package/themes/original/src/components/AddressForm/index.tsx +19 -8
  62. package/themes/original/src/components/AppleLogin/index.tsx +4 -4
  63. package/themes/original/src/components/BusinessBasicInformation/index.tsx +1 -1
  64. package/themes/original/src/components/BusinessController/index.tsx +4 -2
  65. package/themes/original/src/components/BusinessItemAccordion/index.tsx +10 -4
  66. package/themes/original/src/components/BusinessListingSearch/BusinessSearchFooter.tsx +103 -92
  67. package/themes/original/src/components/BusinessListingSearch/BusinessSearchHeader.tsx +7 -3
  68. package/themes/original/src/components/BusinessPreorder/index.tsx +34 -15
  69. package/themes/original/src/components/BusinessProductsList/SubcategoriesComponent/index.tsx +73 -70
  70. package/themes/original/src/components/BusinessProductsList/index.tsx +6 -7
  71. package/themes/original/src/components/BusinessProductsList/styles.tsx +0 -3
  72. package/themes/original/src/components/BusinessProductsListing/index.tsx +10 -6
  73. package/themes/original/src/components/BusinessTypeFilter/index.tsx +9 -8
  74. package/themes/original/src/components/BusinessesListing/Layout/Appointment/index.tsx +2 -1
  75. package/themes/original/src/components/BusinessesListing/Layout/Original/styles.tsx +1 -1
  76. package/themes/original/src/components/BusinessesListing/index.tsx +0 -1
  77. package/themes/original/src/components/Cart/index.tsx +48 -13
  78. package/themes/original/src/components/CartContent/index.tsx +2 -3
  79. package/themes/original/src/components/Checkout/index.tsx +109 -82
  80. package/themes/original/src/components/Favorite/index.tsx +1 -5
  81. package/themes/original/src/components/ForgotPasswordForm/index.tsx +1 -2
  82. package/themes/original/src/components/GoogleMap/index.tsx +39 -18
  83. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +1 -1
  84. package/themes/original/src/components/Home/index.tsx +35 -16
  85. package/themes/original/src/components/LoginForm/index.tsx +12 -5
  86. package/themes/original/src/components/MessageListing/index.tsx +1 -1
  87. package/themes/original/src/components/Messages/index.tsx +20 -13
  88. package/themes/original/src/components/MomentOption/TimeListItem.tsx +56 -0
  89. package/themes/original/src/components/MomentOption/index.tsx +72 -51
  90. package/themes/original/src/components/MomentSelector/index.tsx +5 -2
  91. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +1 -0
  92. package/themes/original/src/components/MultiCheckout/index.tsx +55 -26
  93. package/themes/original/src/components/MyOrders/index.tsx +2 -2
  94. package/themes/original/src/components/NavBar/index.tsx +6 -2
  95. package/themes/original/src/components/OrderDetails/OrderEta.tsx +4 -3
  96. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +11 -4
  97. package/themes/original/src/components/OrderDetails/index.tsx +44 -19
  98. package/themes/original/src/components/OrderDetails/styles.tsx +0 -1
  99. package/themes/original/src/components/OrderProgress/index.tsx +4 -3
  100. package/themes/original/src/components/OrderSummary/index.tsx +32 -11
  101. package/themes/original/src/components/OrderTypeSelector/index.tsx +4 -3
  102. package/themes/original/src/components/OrdersOption/index.tsx +3 -6
  103. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  104. package/themes/original/src/components/PaymentOptions/index.tsx +462 -459
  105. package/themes/original/src/components/PhoneInputNumber/index.tsx +92 -7
  106. package/themes/original/src/components/ProductForm/ActionButton.tsx +7 -11
  107. package/themes/original/src/components/ProductItemAccordion/index.tsx +28 -37
  108. package/themes/original/src/components/ProductOptionSubOption/index.tsx +16 -8
  109. package/themes/original/src/components/ServiceForm/index.tsx +1 -1
  110. package/themes/original/src/components/SignupForm/index.tsx +41 -24
  111. package/themes/original/src/components/SingleOrderCard/index.tsx +7 -4
  112. package/themes/original/src/components/SingleProductCard/index.tsx +3 -4
  113. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  114. package/themes/original/src/components/StripeCardsList/index.tsx +16 -3
  115. package/themes/original/src/components/StripeElementsForm/index.tsx +6 -3
  116. package/themes/original/src/components/StripeElementsForm/naked.tsx +1 -1
  117. package/themes/original/src/components/TaxInformation/index.tsx +3 -2
  118. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +7 -2
  119. package/themes/original/src/components/UserDetails/index.tsx +17 -16
  120. package/themes/original/src/components/UserFormDetails/index.tsx +112 -68
  121. package/themes/original/src/components/UserProfile/index.tsx +9 -1
  122. package/themes/original/src/components/UserVerification/index.tsx +18 -5
  123. package/themes/original/src/components/shared/OAlert.tsx +2 -1
  124. package/themes/original/src/components/shared/OButton.tsx +2 -2
  125. package/themes/original/src/components/shared/OInput.tsx +4 -8
  126. package/themes/original/src/components/shared/OModal.tsx +7 -2
  127. package/themes/original/src/types/index.tsx +12 -4
  128. package/themes/original/src/utils/index.tsx +29 -0
  129. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -1,5 +1,6 @@
1
1
  import React, { useEffect, useState } from 'react'
2
- import { Dimensions, SafeAreaView, StyleSheet, View } from 'react-native';
2
+ import { StarPRNT } from 'react-native-star-prnt';
3
+ import { ActivityIndicator, Dimensions, SafeAreaView, StyleSheet, View } from 'react-native';
3
4
  import SelectDropdown from 'react-native-select-dropdown'
4
5
  import { useLanguage } from 'ordering-components/native'
5
6
  import { useTheme } from 'styled-components/native'
@@ -20,47 +21,36 @@ import {
20
21
  import { Container } from '../../layouts/Container'
21
22
  import { OText, OInput, OIcon, OButton } from '../shared'
22
23
 
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
- ]
24
+ import { PRINTERS } from './printerList'
25
+ import { MessageAlert } from './MessageAlert'
26
+
27
+ const printerList = PRINTERS.map(printer => ({
28
+ ...printer,
29
+ ip: '',
30
+ type: 1,
31
+ nickname: printer.model,
32
+ portName1: `BT:${printer.model.split(' ')[0]}`,
33
+ bt: `BT:${printer.model.split(' ')[0]}`
34
+ }))
46
35
 
47
36
  export const PrinterEdition = (props: any) => {
48
- const {
49
- printer,
50
- onClose
51
- } = props
37
+ const { printer, onClose } = props
52
38
 
53
39
  const HEIGHT_SCREEN = Dimensions.get('window').height
54
40
  const [, t] = useLanguage()
55
41
  const theme = useTheme()
56
- const { handleSubmit, control, setValue, watch } = useForm();
42
+ const { control, setValue, watch } = useForm()
43
+
44
+ const [currentPrinter, setCurrentPrinter] = useState(printer)
45
+ const [discoverPort, setDiscoverPort] = useState({ loading: false, msg: null })
57
46
 
58
47
  const watchIp = watch('ip')
48
+ const watchBt = watch('bt')
59
49
  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)
50
+ const errorIP = !/^((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)
51
+ const errorBT = !/^[^\n]*$/i.test(watchBt) || !watchBt
52
+ const isErrorInput = currentPrinter?.type === 2 ? errorIP : errorBT
53
+ const isErrorNickname = watchNickname && !/^[^\n]*$/i.test(watchNickname)
64
54
 
65
55
  const styles = StyleSheet.create({
66
56
  icons: {
@@ -73,9 +63,13 @@ export const PrinterEdition = (props: any) => {
73
63
  paddingRight: 10
74
64
  },
75
65
  inputStyle: {
76
- height: 40,
77
66
  borderWidth: 1,
78
67
  borderRadius: 8,
68
+ color: theme.colors.arrowColor,
69
+ borderColor: theme.colors.inputSignup,
70
+ backgroundColor: theme.colors.transparent,
71
+ minHeight: 50,
72
+ maxHeight: 50
79
73
  },
80
74
  savePrinterBtnText: {
81
75
  color: theme.colors.white,
@@ -98,6 +92,36 @@ export const PrinterEdition = (props: any) => {
98
92
  })
99
93
  }
100
94
 
95
+ const portDiscovery = async () => {
96
+ try {
97
+ setDiscoverPort({ ...discoverPort, loading: true })
98
+ let printers = await StarPRNT.portDiscovery('Bluetooth');
99
+
100
+ if (printers?.length) {
101
+ setValue('bt', printers[0]?.portName)
102
+ setCurrentPrinter({
103
+ ...currentPrinter,
104
+ ['bt']: printers[0]?.portName
105
+ })
106
+ }
107
+ setTimeout(() => {
108
+ setDiscoverPort({
109
+ ...discoverPort,
110
+ loading: false,
111
+ msg: !printers?.length
112
+ ? t('NO_PRINTERS_FOUND', 'No printers found')
113
+ : null
114
+ })
115
+ }, 1000);
116
+ } catch (e) {
117
+ setValue('bt', currentPrinter?.portName)
118
+ setCurrentPrinter({
119
+ ...currentPrinter,
120
+ ['bt']: currentPrinter?.portName
121
+ })
122
+ }
123
+ }
124
+
101
125
  const onSubmit = () => {
102
126
  handleChangePrinter({ edit: !!printer, isAdd: !printer })
103
127
  onClose && onClose()
@@ -105,6 +129,7 @@ export const PrinterEdition = (props: any) => {
105
129
 
106
130
  useEffect(() => {
107
131
  currentPrinter?.ip && setValue('ip', currentPrinter?.ip)
132
+ currentPrinter?.bt && setValue('bt', currentPrinter?.bt)
108
133
  currentPrinter?.nickname && setValue('nickname', currentPrinter?.nickname)
109
134
  }, [currentPrinter?.type])
110
135
 
@@ -281,51 +306,93 @@ export const PrinterEdition = (props: any) => {
281
306
  {t('CONNECTION_VIA_LAN', 'Via LAN')}
282
307
  </OText>
283
308
  </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>
309
+ <View style={{ flexDirection: 'column', marginTop: 30 }}>
310
+ {currentPrinter?.type === 1 && (
320
311
  <OText
321
312
  size={14}
322
- color={theme.colors.tabBar}
323
- style={{ paddingTop: 5, paddingLeft: 10 }}
313
+ color={theme.colors.toastInfo}
314
+ style={{ marginBottom: 10 }}
324
315
  >
325
- {`${t('EXAMPLE_SHORT', 'Ex:')} 8.8.8.8`}
316
+ {t('SEARCH_AVAILABLE_PRINTER_MESSAGE', 'Use the search icon to find an available printer')}
326
317
  </OText>
327
- </>
328
- )}
318
+ )}
319
+ <View style={{ flexDirection: 'row', alignItems: 'center' }}>
320
+ <Controller
321
+ control={control}
322
+ name={currentPrinter?.type === 2 ? 'ip' : 'bt'}
323
+ rules={{
324
+ required: currentPrinter?.type === 2
325
+ ? t('VALIDATION_ERROR_IP_ADDRESS_REQUIRED', 'Ip address is required')
326
+ : t('VALIDATION_ERROR_BLUETOOTH_PORN_REQUIRED', 'Bluetooth port name is required'),
327
+ pattern: {
328
+ value: currentPrinter?.type === 2
329
+ ? /^((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
330
+ : /^[a-zA-Z0-9]+$/i,
331
+ message: currentPrinter?.type === 2
332
+ ? t('INVALID_ERROR_IP_ADDRESS', 'Invalid ip address')
333
+ : t('INVALID_ERROR_BLUETOOTH_PORT_NAME', 'Invalid bluetooth port name')
334
+ }
335
+ }}
336
+ defaultValue={currentPrinter?.type === 2 ? currentPrinter?.ip ?? '' : currentPrinter?.bt ?? ''}
337
+ render={() => (
338
+ <OInput
339
+ placeholder={currentPrinter?.type === 2
340
+ ? t('IP_ADDRESS', 'Ip address')
341
+ : t('BLUETOOTH_PORT', 'Bluetooth port')
342
+ }
343
+ placeholderTextColor={theme.colors.arrowColor}
344
+ style={{
345
+ ...styles.inputStyle,
346
+ borderColor: isErrorInput ? theme.colors.danger500 : theme.colors.tabBar
347
+ }}
348
+ value={currentPrinter?.type === 2 ? currentPrinter?.ip ?? '' : currentPrinter?.bt ?? ''}
349
+ selectionColor={theme.colors.primary}
350
+ color={theme.colors.textGray}
351
+ onChange={(value: any) => {
352
+ setValue(currentPrinter?.type === 2 ? 'ip' : 'bt', value)
353
+ setCurrentPrinter({
354
+ ...currentPrinter,
355
+ [currentPrinter?.type === 2 ? 'ip' : 'bt']: value
356
+ })
357
+ }}
358
+ />
359
+ )}
360
+ />
361
+ {currentPrinter?.type === 1 && (
362
+ <>
363
+ {!discoverPort.loading ? (
364
+ <FAIcons
365
+ name='search'
366
+ size={22}
367
+ color={theme.colors.primary}
368
+ style={{ marginLeft: 10 }}
369
+ onPress={() => portDiscovery()}
370
+ />
371
+ ) : (
372
+ <ActivityIndicator
373
+ size="small"
374
+ style={{ marginLeft: 10 }}
375
+ color={theme.colors.primary}
376
+ />
377
+ )}
378
+ </>
379
+ )}
380
+ </View>
381
+ </View>
382
+ <OText
383
+ size={14}
384
+ color={theme.colors.tabBar}
385
+ style={{ paddingTop: 5, paddingLeft: 10 }}
386
+ >
387
+ {discoverPort.msg ? (
388
+ <MessageAlert
389
+ message={discoverPort.msg}
390
+ resetMsg={() => setDiscoverPort({ ...discoverPort, msg: null })}
391
+ />
392
+ ) : (
393
+ `${t('EXAMPLE_SHORT', 'Ex:')} ${currentPrinter?.type === 2 ? '8.8.8.8' : currentPrinter?.portName1}`
394
+ )}
395
+ </OText>
329
396
  </WrapperIcons>
330
397
  )}
331
398
  </ContainerEdition>
@@ -341,6 +408,7 @@ export const PrinterEdition = (props: any) => {
341
408
  isDisabled={
342
409
  isErrorNickname ||
343
410
  !currentPrinter?.model ||
411
+ currentPrinter?.type === 1 && !currentPrinter?.bt ||
344
412
  currentPrinter?.type === 2 && !currentPrinter?.ip
345
413
  }
346
414
  onClick={() => onSubmit()}
@@ -0,0 +1,23 @@
1
+ export const PRINTERS = [
2
+ { model: 'mPOP', emulation: 'StarPRNT', printMode: 'append' },
3
+ { model: 'FVP10', emulation: 'StarLine', printMode: 'append' },
4
+ { model: 'TSP100', emulation: 'StarGraphic', printMode: 'appendBitmapText' },
5
+ { model: 'TSP100IV', emulation: 'StarLine', printMode: 'append' },
6
+ { model: 'TSP65011', emulation: 'StarLine', printMode: 'append' },
7
+ { model: 'TSP7001', emulation: 'StarLine', printMode: 'append' },
8
+ { model: 'TSP80011', emulation: 'StarLine', printMode: 'append' },
9
+ { model: 'SP700', emulation: 'StarDotImpact', printMode: 'append' },
10
+ { model: 'SM-S210i', emulation: 'EscPosMobile', printMode: 'append' },
11
+ { model: 'SM-S220i', emulation: 'EscPosMobile', printMode: 'append' },
12
+ { model: 'SM-S230i', emulation: 'EscosMobile', printMode: 'append' },
13
+ { model: 'SM-T300i/T300', emulation: 'EscPosMobile', printMode: 'append' },
14
+ { model: 'SM-T400i', emulation: 'EscosMobile', printMode: 'append' },
15
+ { model: 'SM-L200', emulation: 'StarPRNT', printMode: 'append' },
16
+ { model: 'SM-L300', emulation: 'StarPRNT', printMode: 'append' },
17
+ { model: 'BSC10', emulation: 'EscPos', bt: 'BT:BSC10', printMode: 'append' },
18
+ { model: 'SM-S210i StarPRNT', emulation: 'StarPRNT', printMode: 'append' },
19
+ { model: 'SM-S220i StarPRNT', emulation: 'StarPRNT', printMode: 'append' },
20
+ { model: 'SM-S230i StarPRNT', emulation: 'StarPRNT', printMode: 'append' },
21
+ { model: 'SM-T300i/T300 StarPRNT', emulation: 'StarPRNT', printMode: 'append' },
22
+ { model: 'SM-T400i StarPRNT', emulation: 'StarPRNT', printMode: 'append' },
23
+ ]
@@ -102,7 +102,7 @@ export const PrinterSettings = (props: any) => {
102
102
  type: type ?? _currentPrinter?.type ?? 1,
103
103
  ip: ip ?? _currentPrinter?.ip ?? '',
104
104
  portName: (type ?? _currentPrinter?.type) === 1 || !ip
105
- ? item.portName1 ?? _currentPrinter?.portName1
105
+ ? item?.bt ?? item.portName1 ?? _currentPrinter?.portName1
106
106
  : `TCP:${ip}`
107
107
  }
108
108
  edit ? (_printers[idx] = _item) : _printers.push(_item)
@@ -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