Bluetooth
BLE scan/connect. Web requires a user gesture; mobile uses the native BLE client.
- Methods: requestPermission(), scan(), connect(id), disconnect(id)
- Call from a click/tap handler on web
TSXBluetooth — React
1import { useState } from "react";
2import { Bluetooth, toast } from "@quan-erp/shared-frontend-core";
3
4export function BleScanner() {
5 const [devices, setDevices] = useState<unknown[]>([]);
6 const [connectedId, setConnectedId] = useState<string | null>(null);
7 const ble = Bluetooth.instance;
8
9 async function scan() {
10 try {
11 await ble.requestPermission();
12 const found = await ble.scan();
13 setDevices(Array.isArray(found) ? found : []);
14 } catch (e) {
15 toast.error((e as Error).message ?? "BLE scan failed");
16 }
17 }
18
19 async function connect(id: string) {
20 try {
21 await ble.connect(id);
22 setConnectedId(id);
23 } catch (e) {
24 toast.error((e as Error).message ?? "BLE connect failed");
25 }
26 }
27
28 async function disconnect() {
29 if (!connectedId) return;
30 await ble.disconnect(connectedId);
31 setConnectedId(null);
32 }
33
34 return (
35 <div>
36 <button type="button" onClick={() => void scan()}>
37 Scan
38 </button>
39 <button type="button" onClick={() => void disconnect()}>
40 Disconnect
41 </button>
42 <pre>{JSON.stringify({ connectedId, devices }, null, 2)}</pre>
43 </div>
44 );
45}