mirror of
https://github.com/pybricks/pybricks-code.git
synced 2026-09-12 09:36:27 +00:00
58 lines
1.7 KiB
TypeScript
58 lines
1.7 KiB
TypeScript
// SPDX-License-Identifier: MIT
|
|
// Copyright (c) 2020 The Pybricks Authors
|
|
|
|
import { Reducer, combineReducers } from 'redux';
|
|
import { Action } from '../actions';
|
|
import {
|
|
BootloaderConnectionActionType,
|
|
BootloaderRequestActionType,
|
|
} from '../actions/lwp3-bootloader';
|
|
|
|
/**
|
|
* Describes the state of the bootloader connection.
|
|
*/
|
|
export enum BootloaderConnectionState {
|
|
/**
|
|
* No device is connected.
|
|
*/
|
|
Disconnected = 'bootloader.connection.disconnected',
|
|
/**
|
|
* Connecting to a device.
|
|
*/
|
|
Connecting = 'bootloader.connection.connecting',
|
|
/**
|
|
* Connected to a device.
|
|
*/
|
|
Connected = 'bootloader.connection.connected',
|
|
/**
|
|
* Disconnecting from a device.
|
|
*/
|
|
Disconnecting = 'bootloader.connection.disconnecting',
|
|
}
|
|
|
|
const connection: Reducer<BootloaderConnectionState, Action> = (
|
|
state = BootloaderConnectionState.Disconnected,
|
|
action,
|
|
) => {
|
|
switch (action.type) {
|
|
case BootloaderConnectionActionType.Connect:
|
|
return BootloaderConnectionState.Connecting;
|
|
case BootloaderConnectionActionType.DidConnect:
|
|
return BootloaderConnectionState.Connected;
|
|
case BootloaderRequestActionType.Reboot:
|
|
case BootloaderRequestActionType.Disconnect:
|
|
return BootloaderConnectionState.Disconnecting;
|
|
case BootloaderConnectionActionType.DidDisconnect:
|
|
case BootloaderConnectionActionType.DidFailToConnect:
|
|
return BootloaderConnectionState.Disconnected;
|
|
default:
|
|
return state;
|
|
}
|
|
};
|
|
|
|
export interface BootloaderState {
|
|
readonly connection: BootloaderConnectionState;
|
|
}
|
|
|
|
export default combineReducers({ connection });
|