Skip to content

Commit 47a0345

Browse files
committed
feat(leaderboard): prioritize preferred languages in dropdown
Update sortedLanguagesForDropdown to display the user's preferred languages first, followed by all other languages sorted by track position. This improves user experience by highlighting relevant languages based on user preferences. Inject PreferredLanguageLeaderboardService to access preferred language slugs for this ordering.
1 parent 10719fe commit 47a0345

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

app/components/leaderboard-page/header.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { inject as service } from '@ember/service';
44
import type LanguageModel from 'codecrafters-frontend/models/language';
55
import type RouterService from '@ember/routing/router-service';
66
import type Store from '@ember-data/store';
7+
import type PreferredLanguageLeaderboardService from 'codecrafters-frontend/services/preferred-language-leaderboard';
78

89
interface Signature {
910
Element: HTMLDivElement;
@@ -14,14 +15,24 @@ interface Signature {
1415
}
1516

1617
export default class LeaderboardPageHeader extends Component<Signature> {
18+
@service declare preferredLanguageLeaderboard: PreferredLanguageLeaderboardService;
1719
@service declare router: RouterService;
1820
@service declare store: Store;
1921

2022
get sortedLanguagesForDropdown(): LanguageModel[] {
21-
return this.store
22-
.peekAll('language')
23-
.sortBy('sortPositionForTrack')
24-
.filter((language) => language.liveOrBetaStagesCount > 0);
23+
const allLanguages = this.store.peekAll('language');
24+
const preferredLanguageSlugs = this.preferredLanguageLeaderboard.preferredLanguageSlugs;
25+
26+
return [
27+
// First show the user's preferred languages
28+
...preferredLanguageSlugs.map((slug) => allLanguages.find((language) => language.slug === slug)).filter(Boolean),
29+
30+
// Next, show all languages alphabetically
31+
...allLanguages
32+
.sortBy('sortPositionForTrack')
33+
.reject((language) => preferredLanguageSlugs.includes(language.slug))
34+
.filter((language) => language.liveOrBetaStagesCount > 0),
35+
];
2536
}
2637

2738
@action

0 commit comments

Comments
 (0)