mirror of
https://github.com/pybricks/pybricks-code.git
synced 2026-09-12 09:36:27 +00:00
actions: refactor actions
The pattern we were using for actions required actions to be defined in three places, an enum member containing the type string, an type definition and a function. This combines all three of these into one by using a helper function based on the ideas from [1]. [1]: https://phryneas.de/redux-typescript-no-discriminating-union
This commit is contained in:
+27
-38
@@ -1,74 +1,63 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// Copyright (c) 2020-2021 The Pybricks Authors
|
||||
// Copyright (c) 2020-2022 The Pybricks Authors
|
||||
|
||||
import { takeEvery } from 'typed-redux-saga/macro';
|
||||
import { didFailToWrite as bleUartDidFailToWrite } from '../ble-nordic-uart-service/actions';
|
||||
import { eventProtocolError as pybricksEventProtocolError } from '../ble-pybricks-service/actions';
|
||||
import {
|
||||
BleUartActionType,
|
||||
BleUartDidFailToWriteAction,
|
||||
} from '../ble-nordic-uart-service/actions';
|
||||
import {
|
||||
BlePybricksServiceEventActionType,
|
||||
BlePybricksServiceEventProtocolErrorAction,
|
||||
} from '../ble-pybricks-service/actions';
|
||||
import {
|
||||
BleDeviceActionType,
|
||||
BleDeviceDidFailToConnectAction,
|
||||
BleDeviceFailToConnectReasonType,
|
||||
didFailToConnect as bleDeviceDidFailToConnect,
|
||||
} from '../ble/actions';
|
||||
import { didFailToFetchList } from '../licenses/actions';
|
||||
import {
|
||||
LicenseActionType,
|
||||
LicenseDidFailToFetchListAction,
|
||||
} from '../licenses/actions';
|
||||
import {
|
||||
BootloaderConnectionActionType,
|
||||
BootloaderConnectionDidErrorAction,
|
||||
BootloaderConnectionDidFailToConnectAction,
|
||||
BootloaderConnectionFailureReason,
|
||||
didError as bootloaderDidError,
|
||||
didFailToConnect as bootloaderDidFailToConnect,
|
||||
} from '../lwp3-bootloader/actions';
|
||||
|
||||
function bleDeviceDidFailToConnect(action: BleDeviceDidFailToConnectAction): void {
|
||||
function handleBleDeviceDidFailToConnect(
|
||||
action: ReturnType<typeof bleDeviceDidFailToConnect>,
|
||||
): void {
|
||||
if (action.reason === BleDeviceFailToConnectReasonType.Unknown) {
|
||||
console.error(action.err);
|
||||
}
|
||||
}
|
||||
|
||||
function pybricksProtocolError(
|
||||
action: BlePybricksServiceEventProtocolErrorAction,
|
||||
function handlePybricksEventProtocolError(
|
||||
action: ReturnType<typeof pybricksEventProtocolError>,
|
||||
): void {
|
||||
console.error(action.err);
|
||||
}
|
||||
|
||||
function bleDataDidFailToWrite(action: BleUartDidFailToWriteAction): void {
|
||||
function handleBleUartDidFailToWrite(
|
||||
action: ReturnType<typeof bleUartDidFailToWrite>,
|
||||
): void {
|
||||
console.error(action.err);
|
||||
}
|
||||
|
||||
function bootloaderDidFailToConnect(
|
||||
action: BootloaderConnectionDidFailToConnectAction,
|
||||
function handleBootloaderDidFailToConnect(
|
||||
action: ReturnType<typeof bootloaderDidFailToConnect>,
|
||||
): void {
|
||||
if (action.reason === BootloaderConnectionFailureReason.Unknown) {
|
||||
console.error(action.err);
|
||||
}
|
||||
}
|
||||
|
||||
function bootloaderDidError(action: BootloaderConnectionDidErrorAction): void {
|
||||
function handleBootloaderDidError(action: ReturnType<typeof bootloaderDidError>): void {
|
||||
console.error(action.err);
|
||||
}
|
||||
|
||||
function licenseDidFailToFetch(action: LicenseDidFailToFetchListAction): void {
|
||||
function handleLicenseDidFailToFetch(
|
||||
action: ReturnType<typeof didFailToFetchList>,
|
||||
): void {
|
||||
console.error(`Failed to fetch licenses: ${action.reason.statusText}`);
|
||||
}
|
||||
|
||||
export default function* (): Generator {
|
||||
yield* takeEvery(BleDeviceActionType.DidFailToConnect, bleDeviceDidFailToConnect);
|
||||
yield* takeEvery(
|
||||
BlePybricksServiceEventActionType.ProtocolError,
|
||||
pybricksProtocolError,
|
||||
);
|
||||
yield* takeEvery(BleUartActionType.DidFailToWrite, bleDataDidFailToWrite);
|
||||
yield* takeEvery(
|
||||
BootloaderConnectionActionType.DidFailToConnect,
|
||||
bootloaderDidFailToConnect,
|
||||
);
|
||||
yield* takeEvery(BootloaderConnectionActionType.DidError, bootloaderDidError);
|
||||
yield* takeEvery(LicenseActionType.DidFailToFetchList, licenseDidFailToFetch);
|
||||
yield* takeEvery(bleDeviceDidFailToConnect, handleBleDeviceDidFailToConnect);
|
||||
yield* takeEvery(pybricksEventProtocolError, handlePybricksEventProtocolError);
|
||||
yield* takeEvery(bleUartDidFailToWrite, handleBleUartDidFailToWrite);
|
||||
yield* takeEvery(bootloaderDidFailToConnect, handleBootloaderDidFailToConnect);
|
||||
yield* takeEvery(bootloaderDidError, handleBootloaderDidError);
|
||||
yield* takeEvery(didFailToFetchList, handleLicenseDidFailToFetch);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user