discourse/app/assets/javascripts/admin/addon/routes/admin-customize-themes-show.js
Gabriel Grubba dc996a1e5c
FIX: Locale mismatch at theme translations picker (#26687)
* FIX: Locale mismatch at theme translations picker

Before, the theme translations picker value was set to the
site's default locale, which mismatches from the user's locale.

This commit changes the picker value to the user locale.

relates to https://meta.discourse.org/t/locale-mismatch-at-theme-translations/302879

* DEV: Address code review feedback.

- https://github.com/discourse/discourse/pull/26687#discussion_r1572516758
- https://github.com/discourse/discourse/pull/26687#discussion_r1572524059
2024-04-19 14:23:27 -03:00

85 lines
2.1 KiB
JavaScript

import { action } from "@ember/object";
import Route from "@ember/routing/route";
import { service } from "@ember/service";
import { scrollTop } from "discourse/mixins/scroll-top";
import I18n from "discourse-i18n";
import { COMPONENTS, THEMES } from "admin/models/theme";
export default class AdminCustomizeThemesShowRoute extends Route {
@service dialog;
@service router;
serialize(model) {
return { theme_id: model.get("id") };
}
model(params) {
const all = this.modelFor("adminCustomizeThemes");
const model = all.findBy("id", parseInt(params.theme_id, 10));
if (model) {
return model;
} else {
this.router.replaceWith("adminCustomizeThemes.index");
}
}
setupController(controller, model) {
super.setupController(...arguments);
const parentController = this.controllerFor("adminCustomizeThemes");
parentController.setProperties({
editingTheme: false,
currentTab: model.get("component") ? COMPONENTS : THEMES,
});
controller.setProperties({
model,
parentController,
allThemes: parentController.get("model"),
colorSchemeId: model.get("color_scheme_id"),
colorSchemes: parentController.get("model.extras.color_schemes"),
editingName: false,
editingThemeSetting: false,
userLocale: parentController.get("model.extras.locale"),
});
this.handleHighlight(model);
}
deactivate() {
this.handleHighlight();
}
handleHighlight(theme) {
this.get("controller.allThemes")
.filter((t) => t.get("selected"))
.forEach((t) => t.set("selected", false));
if (theme) {
theme.set("selected", true);
}
}
@action
didTransition() {
scrollTop();
}
@action
willTransition(transition) {
const model = this.controller.model;
if (model.warnUnassignedComponent) {
transition.abort();
this.dialog.yesNoConfirm({
message: I18n.t("admin.customize.theme.unsaved_parent_themes"),
didConfirm: () => {
model.set("recentlyInstalled", false);
transition.retry();
},
didCancel: () => model.set("recentlyInstalled", false),
});
}
}
}