Fix inconsistent profile URL format between own and other users' profiles

- Update profile tab navigation to use consistent URL format for all users
- Redirect old /user/* routes to new format for backward compatibility
- Update all navigation points (dropdown menu, notifications) to use new URLs
This commit is contained in:
Hafiz
2025-08-06 13:24:31 -05:00
parent 0c0dc20dcc
commit 4250fbc53f
6 changed files with 22 additions and 17 deletions
@@ -117,7 +117,7 @@ export default {
closeWithAction () {
this.close();
setTimeout(() => {
this.$router.push({ name: 'achievements' });
this.$router.push(`/profile/${this.$store.state.user.data._id}#achievements`);
}, 200);
},
},
@@ -71,7 +71,7 @@ export default {
props: ['notification', 'canRemove'],
methods: {
action () {
this.$router.push({ name: 'achievements' });
this.$router.push(`/profile/${this.$store.state.user.data._id}#achievements`);
},
},
};
@@ -43,7 +43,7 @@ export default {
},
methods: {
action () {
this.$router.push({ name: 'stats' });
this.$router.push(`/profile/${this.$store.state.user.data._id}#stats`);
},
},
};
@@ -176,7 +176,12 @@ export default {
}
},
showProfile (startingPage) {
this.$router.push({ name: startingPage });
const userId = this.$store.state.user.data._id;
let path = `/profile/${userId}`;
if (startingPage !== 'profile') {
path += `#${startingPage}`;
}
this.$router.push(path);
},
toLearnMore () {
this.$router.push({ name: 'subscription' });
@@ -1216,17 +1216,10 @@ export default {
},
selectPage (page) {
this.selectedPage = page || 'profile';
// Update URL based on whether viewing own profile or another user's profile
let newPath;
if (this.userId === this.userLoggedIn._id) {
// Own profile - use /user/profile, /user/stats, /user/achievements
newPath = `/user/${page}`;
} else {
// Other user's profile - use /profile/:userId#stats, /profile/:userId#achievements
newPath = `/profile/${this.userId}`;
if (page !== 'profile') {
newPath += `#${page}`;
}
const profileUserId = this.userId || this.userLoggedIn._id;
let newPath = `/profile/${profileUserId}`;
if (page !== 'profile') {
newPath += `#${page}`;
}
window.history.replaceState(null, null, newPath);
this.$store.dispatch('common:setTitle', {
+9 -2
View File
@@ -359,11 +359,18 @@ router.beforeEach(async (to, from, next) => {
}
if ((to.name === 'stats' || to.name === 'achievements' || to.name === 'profile') && from.name !== null) {
const userId = store.state.user.data._id;
let redirectPath = `/profile/${userId}`;
if (to.name === 'stats') {
redirectPath += '#stats';
} else if (to.name === 'achievements') {
redirectPath += '#achievements';
}
router.app.$emit('habitica:show-profile', {
userId: store.state.user.data._id,
userId,
startingPage: to.name,
fromPath: from.path,
toPath: to.path,
toPath: redirectPath,
});
return null;
}