Files
pybricks-code/src/firmware/reducers.ts
T
David Lechner 9641898a75 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
2022-02-25 17:58:30 -06:00

32 lines
748 B
TypeScript

// SPDX-License-Identifier: MIT
// Copyright (c) 2021-2022 The Pybricks Authors
import { Reducer, combineReducers } from 'redux';
import { didFailToFinish, didFinish, didProgress, didStart } from './actions';
const flashing: Reducer<boolean> = (state = false, action) => {
if (didStart.matches(action)) {
return true;
}
if (didFinish.matches(action) || didFailToFinish.matches(action)) {
return false;
}
return state;
};
const progress: Reducer<number | null> = (state = null, action) => {
if (didStart.matches(action)) {
return null;
}
if (didProgress.matches(action)) {
return action.value;
}
return state;
};
export default combineReducers({ flashing, progress });