Skip to content

Commit a37c720

Browse files
committed
refactor(language): centralize liveOrBetaStagesCount logic
Move liveOrBetaStagesCount getter to the Language model and update templates and components to use this centralized property. Remove duplicate stagesCount logic from TrackCard component. Fix LeaderboardPage EntriesTable to use correct language argument. These changes improve data consistency by deriving stage counts in one place and simplify component code.
1 parent 64edb9d commit a37c720

File tree

4 files changed

+12
-22
lines changed

4 files changed

+12
-22
lines changed

app/components/leaderboard-page/entries-table.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<div>
44
<table class="min-w-full bg-white">
55
<thead>
6-
<LeaderboardPage::EntriesTable::HeaderRow @language={{this.language}} />
6+
<LeaderboardPage::EntriesTable::HeaderRow @language={{@language}} />
77
</thead>
88
<tbody>
99
{{#each this.sortedTopEntries as |entry index|}}

app/components/tracks-page/track-card/index.hbs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@
2828
{{! Footer }}
2929
<div class="flex items-center justify-between">
3030
{{#if this.currentUserHasStartedTrack}}
31-
<TracksPage::TrackCard::ProgressBar @completedStagesCount={{this.completedStagesCount}} @stagesCount={{this.liveOrBetaStagesCount}} />
31+
<TracksPage::TrackCard::ProgressBar @completedStagesCount={{this.completedStagesCount}} @stagesCount={{@language.liveOrBetaStagesCount}} />
3232
{{else}}
3333
<div class="flex items-center">
3434
{{svg-jar "academic-cap" class="w-4 mr-1 fill-current text-gray-400 dark:text-gray-600"}}
35-
<span class="text-xs text-gray-500">{{this.liveOrBetaStagesCount}} stages</span>
35+
<span class="text-xs text-gray-500">{{@language.liveOrBetaStagesCount}} stages</span>
3636
</div>
3737
{{/if}}
3838

app/components/tracks-page/track-card/index.ts

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,16 +39,6 @@ export default class TrackCard extends Component<Signature> {
3939
}
4040
}
4141

42-
get stagesCount() {
43-
return this.store
44-
.peekAll('course')
45-
.rejectBy('releaseStatusIsAlpha')
46-
.rejectBy('releaseStatusIsDeprecated')
47-
.filter((course) => course.betaOrLiveLanguages.includes(this.args.language))
48-
.mapBy('stages.length')
49-
.reduce((a, b) => a + b, 0);
50-
}
51-
5242
@action
5343
async navigateToTrack() {
5444
await this.router.transitionTo('track', this.args.language.slug);

app/models/language.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,15 @@ export default class LanguageModel extends Model {
152152
return this.slug === 'go';
153153
}
154154

155+
get liveOrBetaStagesCount() {
156+
return this.store
157+
.peekAll('course')
158+
.filter((course) => course.releaseStatusIsLive || course.releaseStatusIsBeta)
159+
.filter((course) => course.betaOrLiveLanguages.includes(this))
160+
.map((course) => course.stages.length)
161+
.reduce((a, b) => a + b, 0);
162+
}
163+
155164
get sortPositionForTrack() {
156165
return [
157166
// Popular tracks, sorted by usage
@@ -164,15 +173,6 @@ export default class LanguageModel extends Model {
164173
].join('');
165174
}
166175

167-
get liveOrBetaStagesCount() {
168-
return this.store
169-
.peekAll('course')
170-
.filter((course) => course.releaseStatusIsLive || course.releaseStatusIsBeta)
171-
.filter((course) => course.betaOrLiveLanguages.includes(this))
172-
.map((course) => course.stages.length)
173-
.reduce((a, b) => a + b, 0);
174-
}
175-
176176
get tealLogoUrl() {
177177
return {
178178
c: tealLogoC,

0 commit comments

Comments
 (0)