mirror of
https://github.com/TrentSPalmer/fcc-challenges.git
synced 2025-08-23 18:23:58 -07:00
add drum-machine-react
This commit is contained in:
24
drum-machine-react/src/reducers/isMetronomePlayingReducer.js
Normal file
24
drum-machine-react/src/reducers/isMetronomePlayingReducer.js
Normal file
@@ -0,0 +1,24 @@
|
||||
import { padsArray } from "../Globals";
|
||||
import { TOGGLEMETRONOME } from "../actions/toggleMetronomeIsPlayingAction.js";
|
||||
|
||||
const initMetronomeIsPlaying = () => {
|
||||
const metronomePlayingStates = {};
|
||||
padsArray.forEach(key => {
|
||||
metronomePlayingStates[key + 'metronomeIsPlaying'] = false;
|
||||
});
|
||||
return metronomePlayingStates;
|
||||
};
|
||||
|
||||
export default (state, action) => {
|
||||
if (!state) {
|
||||
state = initMetronomeIsPlaying();
|
||||
}
|
||||
|
||||
switch (action.type) {
|
||||
case TOGGLEMETRONOME:
|
||||
state[action.key + 'metronomeIsPlaying'] = action.metronomeIsPlaying;
|
||||
return state;
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
}
|
18
drum-machine-react/src/reducers/isMetronomeReducer.js
Normal file
18
drum-machine-react/src/reducers/isMetronomeReducer.js
Normal file
@@ -0,0 +1,18 @@
|
||||
import { padsArray,initialIsMetronome } from "../Globals";
|
||||
|
||||
const getIsMetronomeStatuses = () => {
|
||||
const metronomeStatuses = {};
|
||||
padsArray.forEach(key => {
|
||||
metronomeStatuses[key + 'isMetronome'] = sessionStorage.getItem(key + 'isMetronome');
|
||||
});
|
||||
return metronomeStatuses;
|
||||
}
|
||||
|
||||
export default (state, action) => {
|
||||
initialIsMetronome();
|
||||
|
||||
switch (action.type) {
|
||||
default:
|
||||
return getIsMetronomeStatuses();
|
||||
}
|
||||
};
|
25
drum-machine-react/src/reducers/metronomeTemposReducer.js
Normal file
25
drum-machine-react/src/reducers/metronomeTemposReducer.js
Normal file
@@ -0,0 +1,25 @@
|
||||
import { SETMETRONOMETEMPO } from "../actions/setMetronomeTempoAction.js";
|
||||
import { padsArray,initialMetronomeTempos } from "../Globals";
|
||||
|
||||
const getMetronomeTempos = () => {
|
||||
const metronomeTempos = {};
|
||||
padsArray.forEach(key => {
|
||||
metronomeTempos[key + 'metronomeTempo'] = parseInt(sessionStorage.getItem(key + 'metronomeTempo'));
|
||||
});
|
||||
return metronomeTempos;
|
||||
}
|
||||
|
||||
export default (state, action) => {
|
||||
if (!state) {
|
||||
initialMetronomeTempos();
|
||||
state = getMetronomeTempos();
|
||||
}
|
||||
|
||||
switch (action.type) {
|
||||
case SETMETRONOMETEMPO:
|
||||
state[action.key + 'metronomeTempo'] = action.tempo;
|
||||
return state;
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
};
|
22
drum-machine-react/src/reducers/rootReducer.js
Normal file
22
drum-machine-react/src/reducers/rootReducer.js
Normal file
@@ -0,0 +1,22 @@
|
||||
import { combineReducers } from "redux";
|
||||
import samplesReducer from "./samplesReducer";
|
||||
import volumeOffSetsReducer from "./volumeOffSetsReducer";
|
||||
import setVolumeReducer from "./setVolumeReducer";
|
||||
import setDrumPadGridReducer from "./setDrumPadGridReducer";
|
||||
import setSelectionMenuReducer from "./setSelectionMenuReducer";
|
||||
import isMetronomeReducer from "./isMetronomeReducer";
|
||||
import metronomeTemposReducer from "./metronomeTemposReducer";
|
||||
import isMetronomePlayingReducer from "./isMetronomePlayingReducer";
|
||||
import shouldMetronomeRestartReducer from "./shouldMetronomeRestartReducer";
|
||||
|
||||
export default combineReducers({
|
||||
samplesUrls: samplesReducer,
|
||||
volumeOffSets: volumeOffSetsReducer,
|
||||
volume: setVolumeReducer,
|
||||
drumPadGrid: setDrumPadGridReducer,
|
||||
selectionMenu: setSelectionMenuReducer,
|
||||
metronomeStatuses: isMetronomeReducer,
|
||||
metronomeTempos: metronomeTemposReducer,
|
||||
metronomePlayingStates: isMetronomePlayingReducer,
|
||||
shouldMetronomeRestart: shouldMetronomeRestartReducer,
|
||||
});
|
26
drum-machine-react/src/reducers/samplesReducer.js
Normal file
26
drum-machine-react/src/reducers/samplesReducer.js
Normal file
@@ -0,0 +1,26 @@
|
||||
import { padsArray,initialSamples } from "../Globals";
|
||||
import { SETSAMPLE } from "../actions/setSampleAction.js";
|
||||
|
||||
const getUrls = () => {
|
||||
const urls = {};
|
||||
padsArray.forEach(key => {
|
||||
urls[key] = sessionStorage.getItem(key);
|
||||
});
|
||||
return urls;
|
||||
}
|
||||
|
||||
export default (state, action) => {
|
||||
if (!state) {
|
||||
initialSamples();
|
||||
state = getUrls();
|
||||
}
|
||||
|
||||
switch (action.type) {
|
||||
case SETSAMPLE:
|
||||
state[action.key] = action.sample;
|
||||
return state;
|
||||
default:
|
||||
state = getUrls();
|
||||
return state;
|
||||
}
|
||||
};
|
10
drum-machine-react/src/reducers/setDrumPadGridReducer.js
Normal file
10
drum-machine-react/src/reducers/setDrumPadGridReducer.js
Normal file
@@ -0,0 +1,10 @@
|
||||
import { DRUMPADGRID } from "../actions/setDrumPadGridAction.js";
|
||||
|
||||
export default (state = 'drumPadGrid', action) => {
|
||||
switch(action.type) {
|
||||
case DRUMPADGRID:
|
||||
return action.drumPadGrid;
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
}
|
10
drum-machine-react/src/reducers/setSelectionMenuReducer.js
Normal file
10
drum-machine-react/src/reducers/setSelectionMenuReducer.js
Normal file
@@ -0,0 +1,10 @@
|
||||
import { SELECTIONMENU } from "../actions/setSelectionMenuAction";
|
||||
|
||||
export default (state = 'pads', action) => {
|
||||
switch(action.type) {
|
||||
case SELECTIONMENU:
|
||||
return action.selectionMenu;
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
}
|
18
drum-machine-react/src/reducers/setVolumeReducer.js
Normal file
18
drum-machine-react/src/reducers/setVolumeReducer.js
Normal file
@@ -0,0 +1,18 @@
|
||||
import { CHANGEVOLUME } from "../actions/setVolumeAction.js";
|
||||
|
||||
let DEFAULTVOLUME = 30;
|
||||
|
||||
if (!sessionStorage.hasOwnProperty('volume')) {
|
||||
sessionStorage.setItem('volume','30');
|
||||
} else {
|
||||
DEFAULTVOLUME = sessionStorage.getItem('volume');
|
||||
}
|
||||
|
||||
export default (state = DEFAULTVOLUME, action) => {
|
||||
switch (action.type) {
|
||||
case CHANGEVOLUME:
|
||||
return action.volume;
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
}
|
@@ -0,0 +1,24 @@
|
||||
import { padsArray } from "../Globals";
|
||||
import { RESTARTMETRONOME } from "../actions/shouldMetronomeRestartAction.js";
|
||||
|
||||
const initRestartMetronome = () => {
|
||||
const restartMetronomes = {};
|
||||
padsArray.forEach(key => {
|
||||
restartMetronomes[key + 'restartMetronome'] = false;
|
||||
});
|
||||
return restartMetronomes;
|
||||
};
|
||||
|
||||
export default (state, action) => {
|
||||
if (!state) {
|
||||
state = initRestartMetronome();
|
||||
}
|
||||
|
||||
switch (action.type) {
|
||||
case RESTARTMETRONOME:
|
||||
state[action.key + 'restartMetronome'] = action.restartMetronome;
|
||||
return state;
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
}
|
21
drum-machine-react/src/reducers/volumeOffSetsReducer.js
Normal file
21
drum-machine-react/src/reducers/volumeOffSetsReducer.js
Normal file
@@ -0,0 +1,21 @@
|
||||
import { padsArray,initialPadVolumes } from "../Globals";
|
||||
|
||||
const getVolumeOffSets = () => {
|
||||
const volumeOffSets = {};
|
||||
padsArray.forEach(key => {
|
||||
volumeOffSets[key + 'volume'] = sessionStorage.getItem(key + 'volume');
|
||||
});
|
||||
return volumeOffSets;
|
||||
}
|
||||
|
||||
export default (state, action) => {
|
||||
if (!state) {
|
||||
initialPadVolumes();
|
||||
state = getVolumeOffSets();
|
||||
}
|
||||
|
||||
switch (action.type) {
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
};
|
Reference in New Issue
Block a user