mirror of
https://github.com/freeCodeCamp/freeCodeCamp.git
synced 2026-04-19 04:00:56 -04:00
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:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
66
client/src/utils/tone/index.ts
Normal file
66
client/src/utils/tone/index.ts
Normal 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user