@corti/dictation-web
Version:
Web component for Corti Dictation
83 lines • 4.86 kB
JavaScript
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var _LanguagesController_instances, _LanguagesController_autoLoadedLanguages, _LanguagesController_loadingLanguages, _LanguagesController_previousRegion, _LanguagesController_initialized, _LanguagesController_loadLanguages;
import { errorEvent, languagesChangedEvent } from "../utils/events.js";
import { getLanguagesByRegion } from "../utils/languages.js";
/**
* Controller that manages automatic language loading based on region.
* Loads languages when they're not present and handles region changes.
* Reacts to updates and automatically loads languages when needed.
*/
export class LanguagesController {
constructor(host) {
_LanguagesController_instances.add(this);
_LanguagesController_autoLoadedLanguages.set(this, false);
_LanguagesController_loadingLanguages.set(this, false);
_LanguagesController_previousRegion.set(this, void 0);
_LanguagesController_initialized.set(this, false);
this.host = host;
host.addController(this);
}
initialize() {
__classPrivateFieldSet(this, _LanguagesController_initialized, true, "f");
if (this.host._languages === undefined) {
__classPrivateFieldGet(this, _LanguagesController_instances, "m", _LanguagesController_loadLanguages).call(this);
}
}
hostUpdate() {
// Only react to updates after initialization
if (!__classPrivateFieldGet(this, _LanguagesController_initialized, "f")) {
return;
}
// When region changes, reload languages if they were auto-loaded
if ((__classPrivateFieldGet(this, _LanguagesController_previousRegion, "f") !== this.host.region &&
__classPrivateFieldGet(this, _LanguagesController_autoLoadedLanguages, "f")) ||
this.host._languages === undefined) {
__classPrivateFieldGet(this, _LanguagesController_instances, "m", _LanguagesController_loadLanguages).call(this);
}
__classPrivateFieldSet(this, _LanguagesController_previousRegion, this.host.region, "f");
}
/**
* Clear the auto-loaded flag (when languages are set externally)
*/
clearAutoLoadedFlag() {
__classPrivateFieldSet(this, _LanguagesController_autoLoadedLanguages, false, "f");
}
}
_LanguagesController_autoLoadedLanguages = new WeakMap(), _LanguagesController_loadingLanguages = new WeakMap(), _LanguagesController_previousRegion = new WeakMap(), _LanguagesController_initialized = new WeakMap(), _LanguagesController_instances = new WeakSet(), _LanguagesController_loadLanguages = async function _LanguagesController_loadLanguages() {
if (__classPrivateFieldGet(this, _LanguagesController_loadingLanguages, "f")) {
return;
}
__classPrivateFieldSet(this, _LanguagesController_loadingLanguages, true, "f");
try {
const { languages, defaultLanguage } = getLanguagesByRegion(this.host.region);
__classPrivateFieldSet(this, _LanguagesController_autoLoadedLanguages, true, "f");
this.host._languages = languages;
const previousLanguage = this.host.dictationConfig?.primaryLanguage;
const selectedLanguage = previousLanguage && languages.includes(previousLanguage)
? previousLanguage
: defaultLanguage;
this.host.dictationConfig = {
...this.host.dictationConfig,
primaryLanguage: selectedLanguage || "en",
};
this.host.requestUpdate();
this.host.dispatchEvent(languagesChangedEvent(languages, selectedLanguage));
}
catch (error) {
this.host.dispatchEvent(errorEvent(error));
}
finally {
__classPrivateFieldSet(this, _LanguagesController_loadingLanguages, false, "f");
}
};
//# sourceMappingURL=languages-controller.js.map