File tree Expand file tree Collapse file tree
components/course-page/introduction-step/create-repository-card
utils/course-page-step-list Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -3,7 +3,6 @@ import type Owner from '@ember/owner';
33import CoursePageStateService from 'codecrafters-frontend/services/course-page-state' ;
44import LanguageModel from 'codecrafters-frontend/models/language' ;
55import RepositoryModel from 'codecrafters-frontend/models/repository' ;
6- import RouterService from '@ember/routing/router-service' ;
76import * as Sentry from '@sentry/ember' ;
87import { type Section as MultiSectionCardSection } from 'codecrafters-frontend/components/course-page/multi-section-card' ;
98import { Section , SectionList } from 'codecrafters-frontend/utils/pre-challenge-assessment-section-list' ;
@@ -15,13 +14,13 @@ interface Signature {
1514 Element : HTMLDivElement ;
1615
1716 Args : {
17+ onLanguageSelected : ( repository : RepositoryModel ) => void ;
1818 preferredLanguageSlug : string | undefined ;
1919 repository : RepositoryModel ;
2020 } ;
2121}
2222
2323export default class CreateRepositoryCard extends Component < Signature > {
24- @service declare router : RouterService ;
2524 @service declare coursePageState : CoursePageStateService ;
2625
2726 @tracked expandedSectionIndex : number | null = null ;
@@ -72,7 +71,7 @@ export default class CreateRepositoryCard extends Component<Signature> {
7271
7372 this . expandNextSection ( ) ;
7473
75- this . router . transitionTo ( { queryParams : { repo : this . args . repository . id , track : null } } ) ;
74+ this . args . onLanguageSelected ( this . args . repository ) ;
7675 }
7776
7877 @action
Original file line number Diff line number Diff line change @@ -35,6 +35,7 @@ export default class CourseController extends Controller {
3535 @tracked track : string | undefined = undefined ;
3636
3737 @tracked configureGithubIntegrationModalIsOpen = false ;
38+ @tracked shouldSkipNextModelRefresh = false ;
3839 @tracked sidebarIsExpandedOnDesktop = true ;
3940 @tracked sidebarIsExpandedOnMobile = false ;
4041 @tracked leaderboardIsExpanded = true ;
Original file line number Diff line number Diff line change 11import Controller from '@ember/controller' ;
2+ import CourseController from 'codecrafters-frontend/controllers/course' ;
3+ import { action } from '@ember/object' ;
4+ import { getOwner } from '@ember/owner' ;
25import { service } from '@ember/service' ;
36import type AuthenticatorService from 'codecrafters-frontend/services/authenticator' ;
47import type CoursePageStateService from 'codecrafters-frontend/services/course-page-state' ;
8+ import type RepositoryModel from 'codecrafters-frontend/models/repository' ;
59import type { ModelType as CourseRouteModelType } from 'codecrafters-frontend/routes/course' ;
610import type StepDefinition from 'codecrafters-frontend/utils/course-page-step-list/step' ;
711
@@ -14,4 +18,12 @@ export default class IntroductionController extends Controller {
1418 get currentStep ( ) : StepDefinition {
1519 return this . coursePageState . currentStep as StepDefinition ;
1620 }
21+
22+ @action
23+ handleLanguageSelected ( repository : RepositoryModel ) {
24+ const courseController = getOwner ( this ) ! . lookup ( 'controller:course' ) as CourseController ;
25+ courseController . shouldSkipNextModelRefresh = true ;
26+ courseController . repo = repository . id ;
27+ courseController . track = undefined ;
28+ }
1729}
Original file line number Diff line number Diff line change 11import BaseRoute from 'codecrafters-frontend/utils/base-route' ;
2+ import CourseController from 'codecrafters-frontend/controllers/course' ;
23import { all as RSVPAll } from 'rsvp' ;
34import RepositoryPoller from 'codecrafters-frontend/utils/repository-poller' ;
45import type AuthenticatorService from 'codecrafters-frontend/services/authenticator' ;
@@ -118,6 +119,14 @@ export default class CourseRoute extends BaseRoute {
118119 }
119120
120121 async model ( params : { course_slug : string } , transition : Transition ) : Promise < ModelType > {
122+ const courseController = this . controllerFor ( 'course' ) as CourseController ;
123+
124+ if ( courseController . shouldSkipNextModelRefresh ) {
125+ courseController . shouldSkipNextModelRefresh = false ;
126+
127+ return courseController . model ;
128+ }
129+
121130 const [ allCourses , allRepositories ] = ( await this . loadResources ( ) ) as [ CourseModel [ ] , RepositoryModel [ ] ] ;
122131 const course = allCourses . find ( ( course ) => course . slug === params . course_slug ) as CourseModel ;
123132
Original file line number Diff line number Diff line change 22 <div class =" w-full pt-8 pb-32 px-3 md:px-6 lg:px-10" >
33 <CoursePage::IntroductionStep::WelcomeCard @repository ={{ @model.activeRepository }} class =" mb-6" />
44 <CoursePage::IntroductionStep::CreateRepositoryCard
5+ @onLanguageSelected ={{ this.handleLanguageSelected }}
56 @repository ={{ @model.activeRepository }}
67 @preferredLanguageSlug ={{ @model.track }}
78 class =" mb-6"
Original file line number Diff line number Diff line change @@ -155,6 +155,7 @@ Check the [How to pass this stage](#first-stage-tutorial-heading) section for in
155155 }
156156
157157 get status ( ) {
158+ // debugger;
158159 // TODO: Might need to prioritize "in_progress" when allowing users to change currentStage
159160 if ( this . completedAt ) {
160161 return 'complete' ;
You can’t perform that action at this time.
0 commit comments