mirror of
https://github.com/discourse/discourse.git
synced 2025-02-05 19:11:13 +00:00
DEV: Refactor user index redirects into single place (#24369)
Previously we had similar logic in two places: 1. A DiscourseURL rewrite, based on a site setting 2. Some logic in the user-index route This commit moves everything into (2) to make things clearer and more consistent
This commit is contained in:
parent
c6ead3f5c4
commit
69a70f8159
@ -24,19 +24,5 @@ export default {
|
||||
// Initialize default homepage
|
||||
let siteSettings = owner.lookup("service:site-settings");
|
||||
initializeDefaultHomepage(siteSettings);
|
||||
|
||||
let defaultUserRoute = siteSettings.view_user_route || "summary";
|
||||
if (!owner.lookup(`route:user.${defaultUserRoute}`)) {
|
||||
defaultUserRoute = "summary";
|
||||
}
|
||||
|
||||
DiscourseURL.rewrite(/^\/u\/([^\/]+)\/?$/, `/u/$1/${defaultUserRoute}`, {
|
||||
exceptions: [
|
||||
"/u/account-created",
|
||||
"/users/account-created",
|
||||
"/u/password-reset",
|
||||
"/users/password-reset",
|
||||
],
|
||||
});
|
||||
},
|
||||
};
|
||||
|
@ -1,24 +1,44 @@
|
||||
import { getOwner } from "@ember/application";
|
||||
import { inject as service } from "@ember/service";
|
||||
import DiscourseRoute from "discourse/routes/discourse";
|
||||
|
||||
export default DiscourseRoute.extend({
|
||||
router: service(),
|
||||
site: service(),
|
||||
currentUser: service(),
|
||||
export default class UserIndex extends DiscourseRoute {
|
||||
@service router;
|
||||
@service site;
|
||||
@service currentUser;
|
||||
@service siteSettings;
|
||||
|
||||
get viewingOtherUserDefaultRoute() {
|
||||
let viewUserRoute = this.siteSettings.view_user_route;
|
||||
|
||||
if (viewUserRoute === "activity") {
|
||||
viewUserRoute = "userActivity";
|
||||
} else {
|
||||
viewUserRoute = `user.${viewUserRoute}`;
|
||||
}
|
||||
|
||||
if (getOwner(this).lookup(`route:${viewUserRoute}`)) {
|
||||
return viewUserRoute;
|
||||
} else {
|
||||
// eslint-disable-next-line no-console
|
||||
console.error(
|
||||
`Invalid value for view_user_route '${viewUserRoute}'. Falling back to 'summary'.`
|
||||
);
|
||||
return "user.summary";
|
||||
}
|
||||
}
|
||||
|
||||
beforeModel() {
|
||||
const viewingMe =
|
||||
this.currentUser?.get("username") ===
|
||||
this.modelFor("user").get("username");
|
||||
const destination = viewingMe ? "userActivity" : "user.summary";
|
||||
this.currentUser?.username === this.modelFor("user").username;
|
||||
|
||||
// HACK: Something with the way the user card intercepts clicks seems to break how the
|
||||
// transition into a user's activity works. This makes the back button work on mobile
|
||||
// where there is no user card as well as desktop where there is.
|
||||
if (this.site.mobileView) {
|
||||
this.router.replaceWith(destination);
|
||||
let destination;
|
||||
if (viewingMe) {
|
||||
destination = "user.activity";
|
||||
} else {
|
||||
this.router.transitionTo(destination);
|
||||
destination = this.viewingOtherUserDefaultRoute;
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
this.router.transitionTo(destination);
|
||||
}
|
||||
}
|
||||
|
@ -345,7 +345,7 @@ acceptance("User - Invalid view_user_route setting", function (needs) {
|
||||
});
|
||||
});
|
||||
|
||||
acceptance("User - Valid view_user_route setting", function (needs) {
|
||||
acceptance("User - view_user_route setting set to activity", function (needs) {
|
||||
needs.settings({
|
||||
view_user_route: "activity",
|
||||
});
|
||||
@ -357,6 +357,14 @@ acceptance("User - Valid view_user_route setting", function (needs) {
|
||||
});
|
||||
});
|
||||
|
||||
acceptance("User - Valid view_user_route setting default", function () {
|
||||
test("It defaults to summary", async function (assert) {
|
||||
await visit("/u/eviltrout");
|
||||
|
||||
assert.strictEqual(currentRouteName(), "user.summary");
|
||||
});
|
||||
});
|
||||
|
||||
acceptance("User - Logout", function (needs) {
|
||||
needs.user({ username: "eviltrout" });
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user