import React, { useEffect, useState } from 'react' import { StyleSheet, TouchableOpacity, View, Dimensions } from 'react-native' import SimpleLineIcons from 'react-native-vector-icons/SimpleLineIcons' import FeatherIcon from 'react-native-vector-icons/Feather' import { useTheme } from 'styled-components/native' import ToggleSwitch from 'toggle-switch-react-native'; import { useLanguage } from 'ordering-components-external/native' import { _setStoreData, _retrieveStoreData } from '../../providers/StoreUtil' import { Container, ContainerList, EnabledAutoPrint, NoPrintersContainer } from './styles' import { OText, OIcon, OModal, OButton } from '../shared' import { PrinterEdition } from '../PrinterEdition' export const PrinterSettings = (props: any) => { const { navigation, onClose } = props const [printers, setPrinters] = useState({ list: [] }) const [autoPrintEnabled, setAutoPrintEnabled] = useState(false) const [openModal, setOpenModal] = useState({ open: false, data: null }) const WIDTH_SCREEN = Dimensions.get('window').width const HEIGHT_SCREEN = Dimensions.get('window').height const [, t] = useLanguage() const theme = useTheme() const styles = StyleSheet.create({ icons: { maxWidth: 40, height: 40, padding: 10, alignItems: 'flex-end' }, optionIcons: { padding: 8, borderWidth: 1, marginRight: 10, borderRadius: 8, }, wIconContainer: { flexDirection: 'row', alignItems: 'center', width: WIDTH_SCREEN - 40 - 22 - 22 - 10, // screen - margin - icon - icon - marginIcon }, wrapperContainer: { flexDirection: 'column', }, wrapperIcons: { flexDirection: 'row', justifyContent: 'flex-start', marginBottom: 5, }, inputStyle: { height: 40, borderWidth: 1, borderRadius: 8, }, btnBackArrow: { borderWidth: 0, width: 32, height: 32, tintColor: theme.colors.textGray, backgroundColor: theme.colors.clear, borderColor: theme.colors.clear, shadowColor: theme.colors.clear, paddingLeft: 0, paddingRight: 0, }, titleGroups: { alignItems: 'center', flexDirection: 'row', minHeight: 33, }, addButtonText: { color: theme.colors.inputTextColor, fontSize: 16, }, addButton: { height: 40, marginTop: 10, borderRadius: 8, marginRight: 10, marginBottom: 10, }, }) const goToBack = () => navigation?.canGoBack() && navigation.goBack() const handleClick = async ({ item, type, ip, edit, isAdd, index }: any) => { let _item = item const action = edit || isAdd let _printers = printers.list const idx = index ?? _printers.findIndex((p: any) => p.model === _item.model) if (idx !== -1 && !action) { _printers.splice(idx, 1); } else { const _currentPrinter = _printers.find((p: any) => p.model === _item?.model) _item = { ..._currentPrinter, ...item, type: type ?? _currentPrinter?.type ?? 1, ip: ip ?? _currentPrinter?.ip ?? '', portName: (type ?? _currentPrinter?.type) === 1 || !ip ? item?.bt ?? item.portName1 ?? _currentPrinter?.portName1 : `TCP:${ip}` } edit ? (_printers[idx] = _item) : _printers.push(_item) } setPrinters({ list: _printers }) await _setStoreData('printers', _printers) type === 1 && onClose && onClose() } const handleAutoPrint = async () => { setAutoPrintEnabled(!autoPrintEnabled) await _setStoreData('auto_print_after_accept_order', !autoPrintEnabled) } useEffect(() => { const getStorageData = async () => { const printers = await _retrieveStoreData('printers') const autoPrint = await _retrieveStoreData('auto_print_after_accept_order') setPrinters({ list: printers ?? [] }) setAutoPrintEnabled(!!autoPrint) } getStorageData() }, []) return ( goToBack()} style={styles.btnBackArrow}> {t('PRINTER_SETTINGS', 'Printer Settings')} {!!printers.list.length && ( {t('AUTO_PRINT_AFTER_ACCEPTING_ORDER', 'Auto print after accepting order')} handleAutoPrint()} animationSpeed={200} /> )} {!!printers.list.length && ( setOpenModal({ open: true, data: null })} /> )} {printers.list.map((item: any, i: number) => ( setOpenModal({ open: true, data: { ...item, index: i} })} > {item?.nickname ?? item.model} setOpenModal({ open: true, data: { ...item, index: i} })} > handleClick({ item })} style={{ marginLeft: 10 }} > ))} {!printers.list.length && ( {t('NO_PRINTERS_CONFIGURED', 'No printers configured')} setOpenModal({ open: true, data: null })} /> )} setOpenModal({ open: false, data: null })} > setOpenModal({ open: false, data: null })} /> ) }