import Controller from "@ember/controller"; import discourseComputed from "discourse-common/utils/decorators"; import discourseDebounce from "discourse-common/lib/debounce"; let lastSearch; export default Controller.extend({ searching: false, siteTexts: null, preferred: false, queryParams: ["q", "overridden", "locale"], locale: null, q: null, overridden: false, init() { this._super(...arguments); this.set("locale", this.siteSettings.default_locale); }, _performSearch() { this.store .find("site-text", this.getProperties("q", "overridden", "locale")) .then((results) => { this.set("siteTexts", results); }) .finally(() => this.set("searching", false)); }, @discourseComputed() availableLocales() { return JSON.parse(this.siteSettings.available_locales); }, @discourseComputed("locale") fallbackLocaleFullName() { if (this.siteTexts.extras.fallback_locale) { return this.availableLocales.find((l) => { return l.value === this.siteTexts.extras.fallback_locale; }).name; } }, @discourseComputed("locale") showFallbackLocaleWarning() { return ( this.siteSettings.allow_user_locale && this.siteSettings.set_locale_from_accept_language_header && this.fallbackLocaleFullName ); }, actions: { edit(siteText) { this.transitionToRoute("adminSiteText.edit", siteText.get("id"), { queryParams: { locale: this.locale, localeFullName: this.availableLocales[this.locale], }, }); }, toggleOverridden() { this.toggleProperty("overridden"); this.set("searching", true); discourseDebounce(this, this._performSearch, 400); }, search() { const q = this.q; if (q !== lastSearch) { this.set("searching", true); discourseDebounce(this, this._performSearch, 400); lastSearch = q; } }, updateLocale(value) { this.setProperties({ searching: true, locale: value, }); discourseDebounce(this, this._performSearch, 400); }, }, });