diff --git a/src/services/web-audio-api.service.js b/src/services/web-audio-api.service.js index 2c72233..5a4b863 100644 --- a/src/services/web-audio-api.service.js +++ b/src/services/web-audio-api.service.js @@ -82,9 +82,9 @@ class WebAudioApiService { const audioSounds = Object.values(AUDIO_SOUND); const matchingAudioSound = audioSounds.find(({ ID }) => ID === id); - if (!matchingAudioSound) { + if (matchingAudioSound === undefined) { // Fallback to default if sound not found - return this.playSound(audioSounds[0].ID, volume); + return this.playSound(DEFAULT_SETTINGS.audioSound, volume); } try { diff --git a/src/stores/app.js b/src/stores/app.js index 19043f1..4897c99 100644 --- a/src/stores/app.js +++ b/src/stores/app.js @@ -1,5 +1,6 @@ import LocalStorageService from '../services/local-storage.service.js'; import { + BROWSER, CLIENT_ERROR_MESSAGE, STORAGE_KEY_NAMESPACE, } from '../utils/constants.js'; @@ -9,7 +10,7 @@ class AppStore { /** @type {string} */ #visitedStorageKey = 'visited'; /** @type {import("../index.d.js").UserAgent} */ - #userAgent = 'unknown'; + #userAgent = BROWSER.UNKNOWN; /** @type {boolean} */ #hasUserVisited = true; @@ -22,22 +23,7 @@ class AppStore { this.#hasUserVisited = hasUserVisitedValue !== null ? Boolean(hasUserVisitedValue) : false; - const userAgent = detectUserAgent(); - if ( - [ - 'chrome', - 'chromium', - 'edge', - 'firefox', - 'opera', - 'safari', - 'seamonkey', - ].includes(userAgent) - ) { - this.#userAgent = userAgent; - } else { - this.#userAgent = 'unknown'; - } + this.#userAgent = detectUserAgent(); } get visitedStorageKey() { diff --git a/src/utils/constants.js b/src/utils/constants.js index b64cb35..9b018eb 100644 --- a/src/utils/constants.js +++ b/src/utils/constants.js @@ -28,6 +28,18 @@ const AUDIO_VOLUME = Object.freeze({ ONE_HUNDRED_PERCENT: 100, }); +/** @type {Readonly>} */ +const BROWSER = Object.freeze({ + CHROME: 'chrome', + CHROMIUM: 'chromium', + EDGE: 'edge', + FIREFOX: 'firefox', + OPERA: 'opera', + SAFARI: 'safari', + SEAMONKEY: 'seamonkey', + UNKNOWN: 'unknown', +}); + const CLIENT_ERROR_MESSAGE = Object.freeze({ STORAGE_INVALID: 'Storage invalid.', STORAGE_NAMESPACE_INVALID: 'Storage namespace invalid.', @@ -191,6 +203,7 @@ export { APP_EVENT, AUDIO_SOUND, AUDIO_VOLUME, + BROWSER, CLIENT_ERROR_MESSAGE, EXERCISES_BY_CATEGORY_MAP, EXERCISE_CATEGORY, diff --git a/src/utils/detectUserAgent.js b/src/utils/detectUserAgent.js index 09fe20f..b8fe460 100644 --- a/src/utils/detectUserAgent.js +++ b/src/utils/detectUserAgent.js @@ -1,34 +1,39 @@ +import { BROWSER } from './constants.js'; + /** @returns {import("../index.d.js").UserAgent} */ function detectUserAgent() { const userAgent = window.navigator.userAgent; switch (true) { case userAgent.includes('Firefox/') && !userAgent.includes('Seamonkey/'): - return 'firefox'; + return BROWSER.FIREFOX; case userAgent.includes('Seamonkey/'): - return 'seamonkey'; + return BROWSER.SEAMONKEY; case userAgent.includes('Chrome/') && !userAgent.includes('Chromium/') && !userAgent.includes('Edg/'): - return 'chrome'; + return BROWSER.CHROME; case userAgent.includes('Chromium/'): - return 'chromium'; + return BROWSER.CHROMIUM; + + case userAgent.includes('Edg/'): + return BROWSER.EDGE; case userAgent.includes('Safari/') && !userAgent.includes('Chrome/') && !userAgent.includes('Chromium/'): - return 'safari'; + return BROWSER.SAFARI; case userAgent.includes('OPR/'): - return 'opera'; + return BROWSER.OPERA; case userAgent.includes('Opera/'): - return 'opera'; + return BROWSER.OPERA; default: - return 'unknown'; + return BROWSER.UNKNOWN; } }