ordering-ui-react-native 0.21.45 → 0.21.46-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 (208) hide show
  1. package/package.json +8 -7
  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 +7 -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 +125 -46
  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 +16 -2
  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 +12 -4
  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 +34 -19
  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 +33 -0
  107. package/themes/original/src/components/DatePicker/styles.tsx +20 -0
  108. package/themes/original/src/components/Favorite/index.tsx +9 -9
  109. package/themes/original/src/components/Favorite/styles.tsx +0 -2
  110. package/themes/original/src/components/FloatingButton/styles.tsx +1 -1
  111. package/themes/original/src/components/ForgotPasswordForm/index.tsx +5 -0
  112. package/themes/original/src/components/GPSButton/index.tsx +1 -1
  113. package/themes/original/src/components/GiftCard/GiftCardOrdersList/index.tsx +64 -0
  114. package/themes/original/src/components/GiftCard/GiftCardOrdersList/styles.tsx +8 -0
  115. package/themes/original/src/components/GiftCard/PurchaseGiftCard/styles.tsx +1 -1
  116. package/themes/original/src/components/GiftCard/RedeemGiftCard/styles.tsx +1 -1
  117. package/themes/original/src/components/GiftCard/SendGiftCard/index.tsx +2 -2
  118. package/themes/original/src/components/GiftCard/SendGiftCard/styles.tsx +1 -1
  119. package/themes/original/src/components/GiftCard/SingleGiftCard/index.tsx +101 -0
  120. package/themes/original/src/components/GiftCard/SingleGiftCard/styles.tsx +4 -0
  121. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/index.tsx +83 -0
  122. package/themes/original/src/components/GiftCard/VerticalGiftCardOrdersLayout/styles.tsx +9 -0
  123. package/themes/original/src/components/GoogleMap/index.tsx +39 -18
  124. package/themes/original/src/components/Help/index.tsx +7 -0
  125. package/themes/original/src/components/HelpAccountAndPayment/index.tsx +5 -0
  126. package/themes/original/src/components/HelpGuide/index.tsx +5 -0
  127. package/themes/original/src/components/HelpOrder/index.tsx +5 -0
  128. package/themes/original/src/components/HighestRatedBusinesses/index.tsx +2 -2
  129. package/themes/original/src/components/HighestRatedBusinesses/styles.tsx +1 -1
  130. package/themes/original/src/components/Home/index.tsx +3 -8
  131. package/themes/original/src/components/LoginForm/Otp/index.tsx +4 -16
  132. package/themes/original/src/components/LoginForm/index.tsx +9 -3
  133. package/themes/original/src/components/MessageListing/index.tsx +6 -0
  134. package/themes/original/src/components/Messages/index.tsx +8 -7
  135. package/themes/original/src/components/Messages/styles.tsx +1 -1
  136. package/themes/original/src/components/MomentOption/index.tsx +19 -4
  137. package/themes/original/src/components/MultiCart/index.tsx +1 -1
  138. package/themes/original/src/components/MultiCartsPaymethodsAndWallets/index.tsx +7 -3
  139. package/themes/original/src/components/MultiCheckout/index.tsx +126 -61
  140. package/themes/original/src/components/MultiCheckout/styles.tsx +17 -0
  141. package/themes/original/src/components/MultiOrdersDetails/index.tsx +20 -15
  142. package/themes/original/src/components/MyOrders/index.tsx +28 -28
  143. package/themes/original/src/components/NavBar/index.tsx +5 -0
  144. package/themes/original/src/components/NetworkError/index.tsx +2 -3
  145. package/themes/original/src/components/NetworkError/styles.tsx +2 -2
  146. package/themes/original/src/components/Notifications/index.tsx +9 -8
  147. package/themes/original/src/components/Notifications/styles.tsx +0 -1
  148. package/themes/original/src/components/OrderDetails/OrderHistory.tsx +1 -1
  149. package/themes/original/src/components/OrderDetails/index.tsx +708 -663
  150. package/themes/original/src/components/OrderDetails/styles.tsx +24 -8
  151. package/themes/original/src/components/OrderProgress/index.tsx +22 -3
  152. package/themes/original/src/components/OrderProgress/styles.tsx +1 -1
  153. package/themes/original/src/components/OrderSummary/index.tsx +3 -1
  154. package/themes/original/src/components/OrderTypeSelector/index.tsx +10 -6
  155. package/themes/original/src/components/OrdersOption/PreviousBusinessOrdered/styles.tsx +1 -1
  156. package/themes/original/src/components/OrdersOption/PreviousProductsOrdered/styles.tsx +1 -1
  157. package/themes/original/src/components/OrdersOption/index.tsx +3 -5
  158. package/themes/original/src/components/OrdersOption/styles.tsx +1 -1
  159. package/themes/original/src/components/PaymentOptionCard/index.tsx +4 -2
  160. package/themes/original/src/components/PaymentOptionWallet/index.tsx +56 -56
  161. package/themes/original/src/components/PaymentOptions/index.tsx +47 -4
  162. package/themes/original/src/components/PreviousOrders/index.tsx +2 -0
  163. package/themes/original/src/components/ProductForm/ActionButton.tsx +122 -0
  164. package/themes/original/src/components/ProductForm/ExtraOptions.tsx +56 -0
  165. package/themes/original/src/components/ProductForm/index.tsx +170 -252
  166. package/themes/original/src/components/ProductItemAccordion/index.tsx +55 -44
  167. package/themes/original/src/components/ProductItemAccordion/styles.tsx +3 -4
  168. package/themes/original/src/components/ProductOptionSubOption/index.tsx +112 -91
  169. package/themes/original/src/components/ProfessionalProfile/styles.tsx +3 -3
  170. package/themes/original/src/components/Promotions/index.tsx +13 -11
  171. package/themes/original/src/components/Promotions/styles.tsx +0 -2
  172. package/themes/original/src/components/ReviewDriver/index.tsx +5 -0
  173. package/themes/original/src/components/ReviewDriver/styles.tsx +1 -1
  174. package/themes/original/src/components/ReviewOrder/index.tsx +5 -0
  175. package/themes/original/src/components/ReviewOrder/styles.tsx +1 -1
  176. package/themes/original/src/components/ReviewProducts/index.tsx +5 -0
  177. package/themes/original/src/components/ReviewProducts/styles.tsx +1 -1
  178. package/themes/original/src/components/ServiceForm/index.tsx +1 -1
  179. package/themes/original/src/components/ServiceForm/styles.tsx +4 -4
  180. package/themes/original/src/components/Sessions/index.tsx +5 -0
  181. package/themes/original/src/components/SignupForm/index.tsx +67 -59
  182. package/themes/original/src/components/SingleOrderCard/index.tsx +3 -2
  183. package/themes/original/src/components/SingleProductCard/index.tsx +4 -3
  184. package/themes/original/src/components/SingleProductCard/styles.tsx +0 -3
  185. package/themes/original/src/components/StripeCardsList/index.tsx +12 -35
  186. package/themes/original/src/components/StripeElementsForm/index.tsx +79 -59
  187. package/themes/original/src/components/StripeElementsForm/naked.tsx +47 -0
  188. package/themes/original/src/components/UpsellingProducts/UpsellingContent.tsx +170 -0
  189. package/themes/original/src/components/UpsellingProducts/UpsellingLayout.tsx +91 -0
  190. package/themes/original/src/components/UpsellingProducts/index.tsx +15 -199
  191. package/themes/original/src/components/UpsellingProducts/styles.tsx +19 -0
  192. package/themes/original/src/components/UserFormDetails/index.tsx +123 -75
  193. package/themes/original/src/components/UserFormDetails/styles.tsx +7 -0
  194. package/themes/original/src/components/UserProfile/index.tsx +3 -2
  195. package/themes/original/src/components/UserProfileForm/index.tsx +5 -0
  196. package/themes/original/src/components/WalletTransactions/styles.tsx +1 -0
  197. package/themes/original/src/components/Wallets/index.tsx +7 -4
  198. package/themes/original/src/components/Wallets/styles.tsx +2 -1
  199. package/themes/original/src/components/WebsocketStatus/index.tsx +172 -0
  200. package/themes/original/src/components/WebsocketStatus/styles.tsx +28 -0
  201. package/themes/original/src/components/shared/HeaderTitle.tsx +1 -1
  202. package/themes/original/src/components/shared/OButton.tsx +5 -5
  203. package/themes/original/src/components/shared/OInput.tsx +1 -4
  204. package/themes/original/src/components/shared/OModal.tsx +12 -14
  205. package/themes/original/src/layouts/Container.tsx +5 -3
  206. package/themes/original/src/types/index.tsx +4 -1
  207. package/themes/original/src/utils/index.tsx +12 -1
  208. package/themes/uber-eats/src/components/BusinessesListing/index.tsx +1 -1
@@ -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
+ `;
@@ -0,0 +1,267 @@
1
+ import React, { useEffect, useState } from 'react'
2
+ import { StyleSheet, TouchableOpacity, View, Dimensions } from 'react-native'
3
+ import SimpleLineIcons from 'react-native-vector-icons/SimpleLineIcons'
4
+ import FeatherIcon from 'react-native-vector-icons/Feather'
5
+ import { useTheme } from 'styled-components/native'
6
+ import ToggleSwitch from 'toggle-switch-react-native';
7
+ import { useLanguage } from 'ordering-components/native'
8
+
9
+ import { _setStoreData, _retrieveStoreData } from '../../providers/StoreUtil'
10
+ import { Container, ContainerList, EnabledAutoPrint, NoPrintersContainer } from './styles'
11
+ import { OText, OIcon, OModal, OButton } from '../shared'
12
+ import { PrinterEdition } from '../PrinterEdition'
13
+
14
+ export const PrinterSettings = (props: any) => {
15
+ const { navigation, onClose } = props
16
+
17
+ const [printers, setPrinters] = useState<any>({ list: [] })
18
+ const [autoPrintEnabled, setAutoPrintEnabled] = useState<boolean>(false)
19
+ const [openModal, setOpenModal] = useState<any>({ open: false, data: null })
20
+
21
+ const WIDTH_SCREEN = Dimensions.get('window').width
22
+ const HEIGHT_SCREEN = Dimensions.get('window').height
23
+
24
+ const [, t] = useLanguage()
25
+ const theme = useTheme()
26
+
27
+ const styles = StyleSheet.create({
28
+ icons: {
29
+ maxWidth: 40,
30
+ height: 40,
31
+ padding: 10,
32
+ alignItems: 'flex-end'
33
+ },
34
+ optionIcons: {
35
+ padding: 8,
36
+ borderWidth: 1,
37
+ marginRight: 10,
38
+ borderRadius: 8,
39
+ },
40
+ wIconContainer: {
41
+ flexDirection: 'row',
42
+ alignItems: 'center',
43
+ width: WIDTH_SCREEN - 40 - 22 - 22 - 10, // screen - margin - icon - icon - marginIcon
44
+ },
45
+ wrapperContainer: {
46
+ flexDirection: 'column',
47
+ },
48
+ wrapperIcons: {
49
+ flexDirection: 'row',
50
+ justifyContent: 'flex-start',
51
+ marginBottom: 5,
52
+ },
53
+ inputStyle: {
54
+ height: 40,
55
+ borderWidth: 1,
56
+ borderRadius: 8,
57
+ },
58
+ btnBackArrow: {
59
+ borderWidth: 0,
60
+ width: 32,
61
+ height: 32,
62
+ tintColor: theme.colors.textGray,
63
+ backgroundColor: theme.colors.clear,
64
+ borderColor: theme.colors.clear,
65
+ shadowColor: theme.colors.clear,
66
+ paddingLeft: 0,
67
+ paddingRight: 0,
68
+ },
69
+ titleGroups: {
70
+ alignItems: 'center',
71
+ flexDirection: 'row',
72
+ minHeight: 33,
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
+ },
85
+ })
86
+
87
+ const goToBack = () => navigation?.canGoBack() && navigation.goBack()
88
+
89
+ const handleClick = async ({ item, type, ip, edit, isAdd, index }: any) => {
90
+ let _item = item
91
+ const action = edit || isAdd
92
+ let _printers = printers.list
93
+ const idx = index ?? _printers.findIndex((p: any) => p.model === _item.model)
94
+
95
+ if (idx !== -1 && !action) {
96
+ _printers.splice(idx, 1);
97
+ } else {
98
+ const _currentPrinter = _printers.find((p: any) => p.model === _item?.model)
99
+ _item = {
100
+ ..._currentPrinter,
101
+ ...item,
102
+ type: type ?? _currentPrinter?.type ?? 1,
103
+ ip: ip ?? _currentPrinter?.ip ?? '',
104
+ portName: (type ?? _currentPrinter?.type) === 1 || !ip
105
+ ? item.portName1 ?? _currentPrinter?.portName1
106
+ : `TCP:${ip}`
107
+ }
108
+ edit ? (_printers[idx] = _item) : _printers.push(_item)
109
+ }
110
+
111
+ setPrinters({ list: _printers })
112
+ await _setStoreData('printers', _printers)
113
+ type === 1 && onClose && onClose()
114
+ }
115
+
116
+ const handleAutoPrint = async () => {
117
+ setAutoPrintEnabled(!autoPrintEnabled)
118
+ await _setStoreData('auto_print_after_accept_order', !autoPrintEnabled)
119
+ }
120
+
121
+ useEffect(() => {
122
+ const getStorageData = async () => {
123
+ const printers = await _retrieveStoreData('printers')
124
+ const autoPrint = await _retrieveStoreData('auto_print_after_accept_order')
125
+ setPrinters({ list: printers ?? [] })
126
+ setAutoPrintEnabled(!!autoPrint)
127
+ }
128
+
129
+ getStorageData()
130
+ }, [])
131
+
132
+ return (
133
+ <Container>
134
+ <View style={styles.titleGroups}>
135
+ <TouchableOpacity onPress={() => goToBack()} style={styles.btnBackArrow}>
136
+ <OIcon src={theme.images.general.arrow_left} color={theme.colors.textGray} />
137
+ </TouchableOpacity>
138
+ </View>
139
+ <OText size={24} style={{ paddingTop: 0 }}>
140
+ {t('PRINTER_SETTINGS', 'Printer Settings')}
141
+ </OText>
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 })}
172
+ />
173
+ )}
174
+ <View>
175
+ {printers.list.map((item: any, i: number) => (
176
+ <ContainerList
177
+ key={i}
178
+ activeOpacity={1}
179
+ >
180
+ <View style={styles.wrapperContainer}>
181
+ <View style={{ flexDirection: 'row', alignItems: 'center' }}>
182
+ <TouchableOpacity
183
+ activeOpacity={1}
184
+ style={styles.wIconContainer}
185
+ onPress={() => setOpenModal({ open: true, data: { ...item, index: i} })}
186
+ >
187
+ <SimpleLineIcons
188
+ name='printer'
189
+ color={theme.colors.textGray}
190
+ size={18}
191
+ style={{
192
+ ...styles.icons,
193
+ color: theme.colors.primary
194
+ }}
195
+ />
196
+ <OText
197
+ size={18}
198
+ color={theme.colors.primary}
199
+ >
200
+ {item?.nickname ?? item.model}
201
+ </OText>
202
+ </TouchableOpacity>
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>
223
+ </View>
224
+ </View>
225
+ </ContainerList>
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
+ )}
249
+ </View>
250
+ <OModal
251
+ hideIcons
252
+ entireModal
253
+ customClose
254
+ open={openModal.open}
255
+ style={{ paddingTop: 0, marginTop: 0 }}
256
+ onClose={() => setOpenModal({ open: false, data: null })}
257
+ >
258
+ <PrinterEdition
259
+ printer={openModal.data}
260
+ printersList={printers}
261
+ handleChangePrinter={handleClick}
262
+ onClose={() => setOpenModal({ open: false, data: null })}
263
+ />
264
+ </OModal>
265
+ </Container>
266
+ )
267
+ }