From d8b33e4795adfda14352664acaa46ce5fa574d52 Mon Sep 17 00:00:00 2001 From: Jordan Eldredge Date: Fri, 9 Aug 2019 10:10:20 -0700 Subject: [PATCH] Start using react redux hooks (#845) * Upgrade react-redux * Upgrade react-redux types * Start adopting react-redux hooks --- js/actionCreators/equalizer.ts | 6 +- js/components/EqualizerWindow/EqAuto.tsx | 39 +++------- js/components/MainWindow/ActionButtons.tsx | 52 +++++-------- js/components/MainWindow/Close.tsx | 25 ++----- js/components/MainWindow/ClutterBar.tsx | 74 +++++++++---------- js/components/MainWindow/Kbps.tsx | 26 +++---- js/components/MainWindow/Khz.tsx | 26 +++---- js/components/MainWindow/MainBalance.tsx | 27 +++---- js/components/MainWindow/MainVolume.tsx | 17 +---- js/components/MainWindow/Minimize.tsx | 21 ++---- js/components/MainWindow/MonoStereo.tsx | 33 +++------ .../MainWindow/PlaylistToggleButton.js | 39 +++++----- js/hooks.ts | 19 ++++- js/serialization.test.ts | 8 -- package.json | 4 +- yarn.lock | 27 +++---- 16 files changed, 175 insertions(+), 268 deletions(-) diff --git a/js/actionCreators/equalizer.ts b/js/actionCreators/equalizer.ts index 5eb690ab..4755de57 100644 --- a/js/actionCreators/equalizer.ts +++ b/js/actionCreators/equalizer.ts @@ -64,7 +64,9 @@ export function toggleEq(): Thunk { } export function toggleEqAuto(): Thunk { - return (dispatch, getState) => { - dispatch({ type: SET_EQ_AUTO, value: !getState().equalizer.auto }); + return dispatch => { + // We don't actually support this feature yet so don't let the user ever turn it on. + // dispatch({ type: SET_EQ_AUTO, value: !getState().equalizer.auto }); + dispatch({ type: SET_EQ_AUTO, value: false }); }; } diff --git a/js/components/EqualizerWindow/EqAuto.tsx b/js/components/EqualizerWindow/EqAuto.tsx index 110f7a31..51c8da84 100644 --- a/js/components/EqualizerWindow/EqAuto.tsx +++ b/js/components/EqualizerWindow/EqAuto.tsx @@ -1,34 +1,15 @@ import React from "react"; -import { connect } from "react-redux"; import classnames from "classnames"; -import { SET_EQ_AUTO } from "../../actionTypes"; -import { Dispatch, AppState } from "../../types"; +import * as Actions from "../../actionCreators"; +import { useTypedSelector, useActionCreator } from "../../hooks"; -interface StateProps { - auto: boolean; -} +const EqAuto = React.memo(() => { + const selected = useTypedSelector(state => state.equalizer.auto); + const toggleAuto = useActionCreator(Actions.toggleEqAuto); + return ( +
+ ); +}); -interface DispatchProps { - toggleAuto(): void; -} - -const EqAuto = (props: StateProps & DispatchProps) => { - const className = classnames({ selected: props.auto }); - return
; -}; - -const mapStateToProps = (state: AppState): StateProps => { - return { auto: state.equalizer.auto }; -}; -const mapDispatchToProps = () => (dispatch: Dispatch): DispatchProps => { - // We don't support auto. - return { - toggleAuto: () => dispatch({ type: SET_EQ_AUTO, value: false }), - }; -}; - -export default connect( - mapStateToProps, - mapDispatchToProps -)(EqAuto); +export default EqAuto; diff --git a/js/components/MainWindow/ActionButtons.tsx b/js/components/MainWindow/ActionButtons.tsx index 77d256a1..50442ac9 100644 --- a/js/components/MainWindow/ActionButtons.tsx +++ b/js/components/MainWindow/ActionButtons.tsx @@ -1,37 +1,21 @@ import React from "react"; -import { connect } from "react-redux"; -import { previous, play, pause, stop, next } from "../../actionCreators"; -import { Dispatch } from "../../types"; +import * as Actions from "../../actionCreators"; +import { useActionCreator } from "../../hooks"; -interface DispatchProps { - previous(): void; - play(): void; - pause(): void; - stop(): void; - next(): void; -} +const ActionButtons = React.memo(() => { + const previous = useActionCreator(Actions.previous); + const play = useActionCreator(Actions.play); + const pause = useActionCreator(Actions.pause); + const next = useActionCreator(Actions.next); + return ( +
+