chore(client): tidy Flash by tidying tone (#44320)

* chore(client): tidy Flash by tidying tone

* add store import

* fix enum, remove default switch case

Co-authored-by: Nicholas Carrigan <nhcarrigan@gmail.com>

* typo galore

Co-authored-by: Nicholas Carrigan (he/him) <nhcarrigan@gmail.com>

* rejig everything, because refactoring is fun 🙃

* refactor: DRY playTone

* fix url to foss library

Co-authored-by: Nicholas Carrigan <nhcarrigan@gmail.com>

* alphabetasize FlashMessage enum

* add all FlashMessages to tone/index.ts

* remove redundant type

* my code is correctnpm run develop:client

* fix: remove circular dependency

* fix: typo

* remove logs, play special tones for nightmode

* play sound on challengeComplete

Co-authored-by: Nicholas Carrigan (he/him) <nhcarrigan@gmail.com>

Co-authored-by: Nicholas Carrigan <nhcarrigan@gmail.com>
Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>
This commit is contained in:
Shaun Hamilton
2021-12-01 18:45:17 +00:00
committed by GitHub
parent edf3185b2b
commit 23e241bbc0
29 changed files with 216 additions and 145 deletions

View File

@@ -1,6 +1,8 @@
import { FlashMessages } from '../components/Flash/redux/flash-messages';
const certificateMissingErrorMessage = {
type: 'danger',
message: 'flash.certificate-missing'
message: FlashMessages.CertificateMissing
};
export default certificateMissingErrorMessage;

View File

@@ -1,6 +1,8 @@
import { FlashMessages } from '../components/Flash/redux/flash-messages';
const reallyWeirdErrorMessage = {
type: 'danger',
message: 'flash.really-weird'
message: FlashMessages.ReallyWeird
};
export default reallyWeirdErrorMessage;

View File

@@ -1,6 +1,8 @@
import { FlashMessages } from '../components/Flash/redux/flash-messages';
const reportedErrorMessage = {
type: 'danger',
message: 'flash.not-right'
message: FlashMessages.NotRight
};
export default reportedErrorMessage;

View File

@@ -1,6 +1,8 @@
import { FlashMessages } from '../components/Flash/redux/flash-messages';
const standardErrorMessage = {
type: 'danger',
message: 'flash.went-wrong'
message: FlashMessages.WentWrong
};
export default standardErrorMessage;

View File

@@ -0,0 +1,66 @@
import store from 'store';
import { FlashMessages } from '../../components/Flash/redux/flash-messages';
import { Themes } from '../../components/settings/theme';
const TRY_AGAIN = 'https://campfire-mode.freecodecamp.org/try-again.mp3';
const CHAL_COMP = 'https://campfire-mode.freecodecamp.org/chal-comp.mp3';
const toneUrls = {
[Themes.Default]: 'https://campfire-mode.freecodecamp.org/day.mp3',
[Themes.Night]: 'https://campfire-mode.freecodecamp.org/night.mp3',
donation: 'https://campfire-mode.freecodecamp.org/donate.mp3',
'tests-completed': CHAL_COMP,
'block-toggle': 'https://tonejs.github.io/audio/berklee/guitar_chord1.mp3',
'tests-failed': TRY_AGAIN,
completion: CHAL_COMP,
[FlashMessages.AccountDeleted]: TRY_AGAIN,
[FlashMessages.AddNameSuccess]: CHAL_COMP,
[FlashMessages.AlreadyClaimed]: TRY_AGAIN,
[FlashMessages.CertClaimSuccess]:
'https://campfire-mode.freecodecamp.org/cert.mp3',
[FlashMessages.CertificateMissing]: TRY_AGAIN,
[FlashMessages.CertsPrivate]: TRY_AGAIN,
[FlashMessages.CreateTokenErr]: TRY_AGAIN,
[FlashMessages.DeleteTokenErr]: TRY_AGAIN,
[FlashMessages.EmailValid]: CHAL_COMP,
[FlashMessages.HonestFirst]: TRY_AGAIN,
[FlashMessages.IncompleteSteps]: TRY_AGAIN,
[FlashMessages.NameNeeded]: TRY_AGAIN,
// [FlashMessages.None]: '',
[FlashMessages.NotEligible]: TRY_AGAIN,
[FlashMessages.NotHonest]: TRY_AGAIN,
[FlashMessages.NotRight]: TRY_AGAIN,
[FlashMessages.ProfilePrivate]: TRY_AGAIN,
[FlashMessages.ProgressReset]: TRY_AGAIN,
[FlashMessages.ProvideUsername]: TRY_AGAIN,
[FlashMessages.ReallyWeird]: TRY_AGAIN,
[FlashMessages.ReportSent]: CHAL_COMP,
[FlashMessages.SigninSuccess]: CHAL_COMP,
[FlashMessages.TokenCreated]: CHAL_COMP,
[FlashMessages.TokenDeleted]: CHAL_COMP,
[FlashMessages.UpdatedPreferences]: CHAL_COMP,
[FlashMessages.UsernameNotFound]: TRY_AGAIN,
[FlashMessages.UsernameTaken]: TRY_AGAIN,
[FlashMessages.UsernameUpdated]: CHAL_COMP,
[FlashMessages.UsernameUsed]: TRY_AGAIN,
[FlashMessages.UserNotCertified]: TRY_AGAIN,
[FlashMessages.WrongName]: TRY_AGAIN,
[FlashMessages.WrongUpdating]: TRY_AGAIN,
[FlashMessages.WentWrong]: TRY_AGAIN
} as const;
type ToneStates = keyof typeof toneUrls;
export async function playTone(state: ToneStates): Promise<void> {
const playSound = !!store.get('fcc-sound');
if (playSound && toneUrls[state]) {
const tone = await import('tone');
if (tone.context.state !== 'running') {
tone.context.resume().catch(err => {
console.error('Error resuming audio context', err);
});
}
const player = new tone.Player(toneUrls[state]).toDestination();
player.autostart = true;
}
}