From 813b00a79d7d7637278bef493f347a8bd2899d90 Mon Sep 17 00:00:00 2001 From: "[poww10s]" <[theironminer@gmail.com]> Date: Tue, 17 Nov 2020 23:14:32 -0500 Subject: [PATCH] implement test VCO redux state and actions --- src/App.js | 18 +++++++----- src/app/store.js | 8 +++-- src/features/timbre/Timbre.js | 6 ++++ src/features/timbre/parameters/VCO.js | 42 +++++++++++++++++++++++++++ src/features/timbre/timbreSlice.js | 32 ++++++++++++++++++++ 5 files changed, 95 insertions(+), 11 deletions(-) create mode 100644 src/features/timbre/Timbre.js create mode 100644 src/features/timbre/parameters/VCO.js create mode 100644 src/features/timbre/timbreSlice.js diff --git a/src/App.js b/src/App.js index adc228f..ae8c435 100644 --- a/src/App.js +++ b/src/App.js @@ -1,17 +1,19 @@ import React from 'react'; import logo from './logo.svg'; import { Counter } from './features/counter/Counter'; +import { Timbre } from './features/timbre/Timbre'; import './App.css'; function App() { - return ( -
-
- logo - -
-
- ); + return ( +
+
+ logo + + +
+
+ ); } export default App; diff --git a/src/app/store.js b/src/app/store.js index 5e2834d..30c0c5a 100644 --- a/src/app/store.js +++ b/src/app/store.js @@ -1,8 +1,10 @@ import { configureStore } from '@reduxjs/toolkit'; import counterReducer from '../features/counter/counterSlice'; +import timbreReducer from '../features/timbre/timbreSlice'; export default configureStore({ - reducer: { - counter: counterReducer, - }, + reducer: { + counter: counterReducer, + timbre: timbreReducer, + }, }); diff --git a/src/features/timbre/Timbre.js b/src/features/timbre/Timbre.js new file mode 100644 index 0000000..e34a769 --- /dev/null +++ b/src/features/timbre/Timbre.js @@ -0,0 +1,6 @@ +import React from 'react'; +import VCO from './parameters/VCO'; + +export function Timbre(props) { + return ; +} diff --git a/src/features/timbre/parameters/VCO.js b/src/features/timbre/parameters/VCO.js new file mode 100644 index 0000000..469d390 --- /dev/null +++ b/src/features/timbre/parameters/VCO.js @@ -0,0 +1,42 @@ +import React from 'react'; +import { useSelector, useDispatch } from 'react-redux'; +import { selectById, parameterUpdated } from '../timbreSlice.js'; + +export default function VCO(props) { + const parameters = useSelector((state) => selectById(state, props.id)); + + const dispatch = useDispatch(); + return ( +
+ Current Waveform {parameters.waveform} + + Current Mod Value {parameters.mod} + + dispatch( + parameterUpdated({ + id: 'vco1', + changes: { mod: e.target.value }, + }) + ) + } + /> +
+ ); +} diff --git a/src/features/timbre/timbreSlice.js b/src/features/timbre/timbreSlice.js new file mode 100644 index 0000000..365322c --- /dev/null +++ b/src/features/timbre/timbreSlice.js @@ -0,0 +1,32 @@ +import { createSlice, createEntityAdapter } from '@reduxjs/toolkit'; + +const timbreAdapter = createEntityAdapter({}); + +const timbreSlice = createSlice({ + name: 'timbre', + initialState: timbreAdapter.getInitialState({ + ids: ['vco1'], + entities: { + vco1: { + id: 'vco1', + waveform: 'Saw', + mod: 0, + }, + }, + }), + reducers: { + parameterAdded: timbreAdapter.addOne, + parameterUpdated: timbreAdapter.updateOne, + }, +}); + +export const { + selectById, + selectAll, + selectEntities, + selectIds, +} = timbreAdapter.getSelectors((state) => state.timbre); + +export const { parameterAdded, parameterUpdated } = timbreSlice.actions; + +export default timbreSlice.reducer;