Skip to content

Commit 4b45116

Browse files
committed
refactor: update language handling in track and catalog routes
Refactor the Track and Catalog routes to improve language management. Change the way primer concept groups are accessed by using the language model directly. Remove unnecessary promises for concept groups and concepts, and streamline the fetching of language data. This enhances code clarity and optimizes data retrieval for better performance.
1 parent b40ee7d commit 4b45116

File tree

3 files changed

+16
-21
lines changed

3 files changed

+16
-21
lines changed

app/routes/catalog.ts

+5-6
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ import BaseRoute from 'codecrafters-frontend/utils/base-route';
77
import RepositoryPoller from 'codecrafters-frontend/utils/repository-poller';
88
import { hash as RSVPHash } from 'rsvp';
99
import RouteInfoMetadata, { RouteColorScheme } from 'codecrafters-frontend/utils/route-info-metadata';
10-
import type ConceptGroupModel from 'codecrafters-frontend/models/concept-group';
11-
import type ConceptModel from 'codecrafters-frontend/models/concept';
10+
import type LanguageModel from 'codecrafters-frontend/models/language';
1211

1312
export type ModelType = {
1413
repositories?: RepositoryModel[];
@@ -28,8 +27,7 @@ export default class CatalogRoute extends BaseRoute {
2827
const modelPromises: {
2928
repositories?: Promise<RepositoryModel[]>;
3029
courses?: Promise<CourseModel[]>;
31-
_conceptGroups?: Promise<ConceptGroupModel[]>;
32-
_concepts?: Promise<ConceptModel[]>;
30+
_languages?: Promise<LanguageModel[]>;
3331
} = {};
3432

3533
if (this.authenticator.isAuthenticated) {
@@ -44,8 +42,9 @@ export default class CatalogRoute extends BaseRoute {
4442
}) as unknown as Promise<CourseModel[]>;
4543

4644
// Resources required by the track page
47-
modelPromises._conceptGroups = this.store.findAll('concept-group', { include: 'author' }) as unknown as Promise<ConceptGroupModel[]>;
48-
modelPromises._concepts = this.store.findAll('concept', { include: 'author,questions' }) as unknown as Promise<ConceptModel[]>;
45+
modelPromises._languages = this.store.findAll('language', {
46+
include: 'primer-concept-group,primer-concept-group.author,primer-concept-group.concepts,primer-concept-group.concepts.author',
47+
}) as unknown as Promise<LanguageModel[]>;
4948

5049
return RSVPHash(modelPromises) as Promise<ModelType>;
5150
}

app/routes/track.ts

+5-13
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,10 @@ import type MetaDataService from 'codecrafters-frontend/services/meta-data';
99
import type CourseModel from 'codecrafters-frontend/models/course';
1010
import type LanguageModel from 'codecrafters-frontend/models/language';
1111
import RouteInfoMetadata, { RouteColorScheme } from 'codecrafters-frontend/utils/route-info-metadata';
12-
import type ConceptGroupModel from 'codecrafters-frontend/models/concept-group';
1312

1413
export type ModelType = {
1514
courses: CourseModel[];
1615
language: LanguageModel;
17-
primerConceptGroup: ConceptGroupModel | null;
1816
};
1917

2018
export default class TrackRoute extends BaseRoute {
@@ -49,25 +47,19 @@ export default class TrackRoute extends BaseRoute {
4947
include: 'extensions,stages,language-configurations.language',
5048
})) as unknown as CourseModel[];
5149

52-
const language = this.store.peekAll('language').findBy('slug', params.track_slug) as LanguageModel;
50+
const languages = (await this.store.findAll('language', {
51+
include: 'primer-concept-group,primer-concept-group.author,primer-concept-group.concepts,primer-concept-group.concepts.author',
52+
})) as unknown as LanguageModel[];
5353

54-
const relatedResourcePromises: Promise<unknown>[] = [];
55-
56-
if (language.trackPrimerConceptGroupSlug) {
57-
relatedResourcePromises.push(this.store.findAll('concept-group', { include: 'author' }));
58-
relatedResourcePromises.push(this.store.findAll('concept', { include: 'author,questions' }));
59-
}
54+
const language = languages.find((language) => language.slug === params.track_slug)!;
6055

6156
if (this.authenticator.isAuthenticated) {
62-
relatedResourcePromises.push(this.store.findAll('repository', { include: RepositoryPoller.defaultIncludedResources }));
57+
await this.store.findAll('repository', { include: RepositoryPoller.defaultIncludedResources });
6358
}
6459

65-
await Promise.all(relatedResourcePromises);
66-
6760
return {
6861
courses: courses.filter((course) => course.betaOrLiveLanguages.includes(language)),
6962
language: language,
70-
primerConceptGroup: this.store.peekAll('concept-group').find((conceptGroup) => conceptGroup.slug === language.trackPrimerConceptGroupSlug),
7163
};
7264
}
7365
}

app/templates/track.hbs

+6-2
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,12 @@
1010
<div class="container mx-auto lg:max-w-screen-lg px-3 md:px-6 py-6 md:py-10">
1111
<div class="flex items-start">
1212
<div class="flex-grow">
13-
{{#if @model.primerConceptGroup}}
14-
<TrackPage::PrimerConceptGroupSection @language={{@model.language}} @conceptGroup={{@model.primerConceptGroup}} class="w-full mb-6" />
13+
{{#if @model.language.primerConceptGroup}}
14+
<TrackPage::PrimerConceptGroupSection
15+
@language={{@model.language}}
16+
@conceptGroup={{@model.language.primerConceptGroup}}
17+
class="w-full mb-6"
18+
/>
1519
{{/if}}
1620

1721
<div class="border-b pb-1 mb-4 flex">

0 commit comments

Comments
 (0)