From db7c2bb788df5d642effb62c37f0e6900859e428 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Sun, 11 Oct 2020 16:07:53 -0400 Subject: [PATCH] random speaker button --- vocodes/src/App.tsx | 24 ++++++++++++++----- vocodes/src/modes/speak/SpeakComponent.tsx | 27 ++++++++++++++++++---- 2 files changed, 40 insertions(+), 11 deletions(-) diff --git a/vocodes/src/App.tsx b/vocodes/src/App.tsx index f5ac47b1d9..2da3fb9fcd 100644 --- a/vocodes/src/App.tsx +++ b/vocodes/src/App.tsx @@ -165,7 +165,7 @@ class App extends React.Component { } setSpeakerBySlug = (speakerSlug: string) : void => { - let selectedSpeaker = undefined; + let selectedSpeaker : Speaker | undefined = undefined; SPEAKERS.forEach(speaker => { if (speaker.slug === speakerSlug) { @@ -173,12 +173,24 @@ class App extends React.Component { } }) - if (selectedSpeaker !== undefined) { - this.setState({ - speaker: selectedSpeaker, - extrasMode: ExtrasMode.SPEAKER_INFO, - }); + if (selectedSpeaker === undefined) { + return; } + + const speakers = SPEAKERS_BY_CATEGORY.get(this.state.currentSpeakerCategory) || []; + + let isCategoryCorrect = speakers.find(speaker => + speaker.getSlug() === selectedSpeaker!.getSlug()) !== undefined; + + let category = isCategoryCorrect + ? this.state.currentSpeakerCategory + : CATEGORY_ALL; + + this.setState({ + speaker: selectedSpeaker, + extrasMode: ExtrasMode.SPEAKER_INFO, + currentSpeakerCategory: category, + }); } updateSpectrogram = (spectrogram: Spectrogram) => { diff --git a/vocodes/src/modes/speak/SpeakComponent.tsx b/vocodes/src/modes/speak/SpeakComponent.tsx index a756e517a4..8733938047 100644 --- a/vocodes/src/modes/speak/SpeakComponent.tsx +++ b/vocodes/src/modes/speak/SpeakComponent.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { CategoryDropdown } from './dropdowns/CategoryDropdown'; import { Form } from './Form'; -import { Speaker, SpeakerCategory } from '../../model/Speakers'; +import { Speaker, SpeakerCategory, SPEAKERS } from '../../model/Speakers'; import { SpeakerDropdown } from './dropdowns/SpeakerDropdown'; import { SpeakerInfo } from './extras/SpeakerInfo'; import { Spectrogram } from './extras/Spectrogram'; @@ -140,6 +140,12 @@ class SpeakComponent extends React.Component { } } + selectRandomSpeaker = () => { + const index = Math.floor(Math.random() * SPEAKERS.length); + const speaker = SPEAKERS[index]!; + this.props.changeSpeakerCallback(speaker.getSlug()); + } + public render() { let speakerPictureOrSpectrogram; switch (this.props.extrasMode) { @@ -174,11 +180,22 @@ class SpeakComponent extends React.Component { return (
- +
+
+ +
+
+ +
+
+