expo-duooomi-app/stores/BleStore.ts

60 lines
1.2 KiB
TypeScript

import { makeAutoObservable } from 'mobx'
import { type BleDevice } from '@/ble/core/types'
import { type DeviceInfo } from '@/ble/protocol/types'
interface BleState {
isScanning: boolean
isConnected: boolean
connectedDevice: BleDevice | null
deviceInfo: DeviceInfo | null
version: string
isActivated: boolean
transferProgress: number
discoveredDevices: BleDevice[]
contents: string[]
loading: {
connecting: boolean
querying: boolean
converting: boolean
transferring: boolean
}
error: string | null
}
class BleStore {
// State
state: BleState = {
isScanning: false,
isConnected: false,
connectedDevice: null,
deviceInfo: null,
version: '',
isActivated: false,
transferProgress: 0,
discoveredDevices: [],
contents: [],
loading: {
connecting: false,
querying: false,
converting: false,
transferring: false,
},
error: null,
}
bleSessionId = `ble-session-${Date.now().toString()}`
constructor() {
makeAutoObservable(this)
}
// Actions
setState(updater: (prev: BleState) => BleState) {
this.state = updater(this.state)
}
}
// Global instance
export const bleStore = new BleStore()