diff --git a/js/components/Visualizer.tsx b/js/components/Visualizer.tsx new file mode 100644 index 00000000..15432572 --- /dev/null +++ b/js/components/Visualizer.tsx @@ -0,0 +1,35 @@ +import React from "react"; + +import * as Actions from "../actionCreators"; +import * as Selectors from "../selectors"; +import { useTypedSelector, useActionCreator } from "../hooks"; +import VisualizerInner from "./VisualizerInner"; + +type Props = { + analyser: AnalyserNode; +}; + +function Visualizer(props: Props) { + const colors = useTypedSelector(Selectors.getSkinColors); + const style = useTypedSelector(Selectors.getVisualizerStyle); + const status = useTypedSelector(Selectors.getMediaStatus); + const getWindowShade = useTypedSelector(Selectors.getWindowShade); + const dummyVizData = useTypedSelector(Selectors.getDummyVizData); + + const toggleVisualizerStyle = useActionCreator(Actions.toggleVisualizerStyle); + + const windowShade = getWindowShade("main"); + const innerProps = { + colors, + style, + width: windowShade ? 38 : 76, + height: windowShade ? 5 : 16, + status, + windowShade, + dummyVizData, + toggleVisualizerStyle, + }; + return ; +} + +export default Visualizer; diff --git a/js/components/Visualizer.js b/js/components/VisualizerInner.js similarity index 93% rename from js/components/Visualizer.js rename to js/components/VisualizerInner.js index 4f6fdfd0..ba4fa48d 100644 --- a/js/components/Visualizer.js +++ b/js/components/VisualizerInner.js @@ -1,9 +1,9 @@ import React from "react"; -import { connect } from "react-redux"; -import { toggleVisualizerStyle } from "../actionCreators"; -import { getWindowShade, getVisualizerStyle } from "../selectors"; +import * as Actions from "../actionCreators"; +import * as Selectors from "../selectors"; import { VISUALIZERS, MEDIA_STATUS } from "../constants"; +import { useTypedSelector, useActionCreator } from "../hooks"; const PIXEL_DENSITY = 2; const NUM_BARS = 20; @@ -101,7 +101,7 @@ function preRenderBar(height, colors, renderHeight) { return barCanvas; } -class Visualizer extends React.Component { +class VisualizerInner extends React.Component { componentDidMount() { this.barPeaks = new Array(NUM_BARS).fill(0); this.barPeakFrames = new Array(NUM_BARS).fill(0); @@ -320,18 +320,4 @@ class Visualizer extends React.Component { } } -const mapStateToProps = (state) => ({ - colors: state.display.skinColors, - style: getVisualizerStyle(state), - width: getWindowShade(state)("main") ? 38 : 76, - height: getWindowShade(state)("main") ? 5 : 16, - status: state.media.status, - windowShade: getWindowShade(state)("main"), - dummyVizData: state.display.dummyVizData, -}); - -const mapDispatchToProps = { - toggleVisualizerStyle, -}; - -export default connect(mapStateToProps, mapDispatchToProps)(Visualizer); +export default VisualizerInner; diff --git a/js/selectors.ts b/js/selectors.ts index 7f9b5227..a04d18d3 100644 --- a/js/selectors.ts +++ b/js/selectors.ts @@ -15,6 +15,7 @@ import { SkinRegion, GenLetterWidths, MilkdropMessage, + DummyVizData, } from "./types"; import { createSelector, defaultMemoize } from "reselect"; import * as Utils from "./utils"; @@ -492,6 +493,10 @@ const defaultPlaylistStyle = { font: "Arial", }; +export function getSkinColors(state: AppState): string[] { + return state.display.skinColors; +} + export const getSkinPlaylistStyle = (state: AppState): PlaylistStyle => { return state.display.skinPlaylistStyle || defaultPlaylistStyle; }; @@ -742,6 +747,10 @@ export const getLineColorsImage = createSelector( } ); +export function getDummyVizData(state: AppState): DummyVizData | null { + return state.display.dummyVizData; +} + export function getMarqueeStep(state: AppState): number { return state.display.marqueeStep; }