import React from 'react'; import { Button, PermissionsAndroid, Platform, Text, TextInput, View } from 'react-native'; import { InterfaceType, StarConnectionSettings, StarPrinter, StarXpandCommand } from 'react-native-star-print'; import { Picker } from '@react-native-picker/picker'; interface AppProps { } interface AppState { interfaceType: InterfaceType; identifier: string; imageBase64: string; } class App extends React.Component { private _onPressPrintButton = async() => { var settings = new StarConnectionSettings(); settings.interfaceType = this.state.interfaceType; settings.identifier = this.state.identifier; // settings.autoSwitchInterface = true; // If you are using Android 12 and targetSdkVersion is 31 or later, // you have to request Bluetooth permission (Nearby devices permission) to use the Bluetooth printer. // https://developer.android.com/about/versions/12/features/bluetooth-permissions if (Platform.OS == 'android' && 31 <= Platform.Version) { if (this.state.interfaceType == InterfaceType.Bluetooth || settings.autoSwitchInterface == true) { var hasPermission = await this._confirmBluetoothPermission(); if (!hasPermission) { console.log(`PERMISSION ERROR: You have to allow Nearby devices to use the Bluetooth printer`); return; } } } var printer = new StarPrinter(settings); try { var builder = new StarXpandCommand.StarXpandCommandBuilder(); builder.addDocument(new StarXpandCommand.DocumentBuilder() .addPrinter(new StarXpandCommand.PrinterBuilder() .actionPrintImage(new StarXpandCommand.Printer.ImageParameter("logo_01.png", 406)) .styleInternationalCharacter(StarXpandCommand.Printer.InternationalCharacterType.Usa) .styleCharacterSpace(0) .styleAlignment(StarXpandCommand.Printer.Alignment.Center) .actionPrintText("Star Clothing Boutique\n" + "123 Star Road\n" + "City, State 12345\n" + "\n") .styleAlignment(StarXpandCommand.Printer.Alignment.Left) .actionPrintText("Date:MM/DD/YYYY Time:HH:MM PM\n" + "--------------------------------\n" + "\n") .actionPrintText("SKU Description Total\n" + "300678566 PLAIN T-SHIRT 10.99\n" + "300692003 BLACK DENIM 29.99\n" + "300651148 BLUE DENIM 29.99\n" + "300642980 STRIPED DRESS 49.99\n" + "300638471 BLACK BOOTS 35.99\n" + "\n" + "Subtotal 156.95\n" + "Tax 0.00\n" + "--------------------------------\n") .actionPrintText("Total ") .add(new StarXpandCommand.PrinterBuilder() .styleMagnification(new StarXpandCommand.MagnificationParameter(2, 2)) .actionPrintText(" $156.95\n") ) .actionPrintText("--------------------------------\n" + "\n" + "Charge\n" + "156.95\n" + "Visa XXXX-XXXX-XXXX-0123\n" + "\n") .add(new StarXpandCommand.PrinterBuilder() .styleInvert(true) .actionPrintText("Refunds and Exchanges\n") ) .actionPrintText("Within ") .add(new StarXpandCommand.PrinterBuilder() .styleUnderLine(true) .actionPrintText("30 days") ) .actionPrintText(" with receipt\n") .actionPrintText("And tags attached\n" + "\n") .styleAlignment(StarXpandCommand.Printer.Alignment.Center) .actionPrintBarcode(new StarXpandCommand.Printer.BarcodeParameter('0123456', StarXpandCommand.Printer.BarcodeSymbology.Jan8) .setBarDots(3) .setBarRatioLevel(StarXpandCommand.Printer.BarcodeBarRatioLevel.Level0) .setHeight(5) .setPrintHri(true)) .actionFeedLine(1) .actionPrintQRCode(new StarXpandCommand.Printer.QRCodeParameter('Hello World.\n') .setModel(StarXpandCommand.Printer.QRCodeModel.Model2) .setLevel(StarXpandCommand.Printer.QRCodeLevel.L) .setCellSize(8)) .actionCut(StarXpandCommand.Printer.CutType.Partial) ) ); var commands = await builder.getCommands(); await printer.open(); await printer.print(commands); console.log(`Success`); } catch(error) { console.log(`Error: ${String(error)}`); } finally { await printer.close(); await printer.dispose(); } } private async _confirmBluetoothPermission(): Promise { var hasPermission = false; try { hasPermission = await PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT); if (!hasPermission) { const status = await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT); hasPermission = status == PermissionsAndroid.RESULTS.GRANTED; } } catch (err) { console.warn(err); } return hasPermission; } constructor(props: any) { super(props); this.state = { interfaceType: InterfaceType.Lan, identifier: '00:11:62:00:00:00', imageBase64: '' }; } render() { return ( Interface { this.setState({ interfaceType: value }); }}> Identifier { this.setState({ identifier: value }); }} />