MCPcopy Index your code
hub / github.com/angular/angular / Tutorial

Class Tutorial

adev/src/app/features/tutorial/tutorial.component.ts:67–277  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

65 providers: [SplitResizerHandler],
66})
67export default class Tutorial {
68 readonly content = viewChild<ElementRef<HTMLDivElement>>('content');
69 readonly editor = viewChild<ElementRef<HTMLDivElement>>('editor');
70 readonly resizer = viewChild.required<ElementRef<HTMLDivElement>>('resizer');
71 readonly revealAnswerButton = viewChild<ElementRef<HTMLButtonElement>>('revealAnswerButton');
72
73 private readonly environmentInjector = inject(EnvironmentInjector);
74 private readonly elementRef = inject(ElementRef<unknown>);
75 private readonly embeddedTutorialManager = inject(EmbeddedTutorialManager);
76 private readonly nodeRuntimeState = inject(NodeRuntimeState);
77 private readonly route = inject(ActivatedRoute);
78 private readonly splitResizerHandler = inject(SplitResizerHandler);
79 private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
80
81 readonly documentContent = signal<string | null>(null);
82 readonly localTutorialZipUrl = signal<string | undefined>(undefined);
83
84 readonly nextTutorialPath = signal<string | null>(null);
85 readonly stepName = signal<string | null>(null);
86 readonly tutorialName = signal<string | null>(null);
87 readonly tutorialNavigationItems = signal<NavigationItem[]>([]);
88 readonly showNavigationDropdown = signal<boolean>(false);
89
90 readonly shouldRenderContent = signal<boolean>(false);
91 readonly shouldRenderEmbeddedEditor = signal<boolean>(false);
92 readonly shouldRenderRevealAnswer = signal<boolean>(false);
93 readonly restrictedMode = signal<boolean>(false);
94
95 nextStepPath: string | undefined;
96 previousStepPath: string | undefined;
97
98 embeddedEditorComponent = signal<Type<unknown> | null>(null);
99
100 canRevealAnswer: Signal<boolean> = signal(false);
101 readonly answerRevealed = signal<boolean>(false);
102
103 constructor() {
104 this.route.data
105 .pipe(
106 filter(() =>
107 Boolean(this.route?.routeConfig?.path?.startsWith(`${PAGE_PREFIX.TUTORIALS}/`)),
108 ),
109 takeUntilDestroyed(),
110 )
111 .subscribe((data) => {
112 const docContent = (data['docContent'] as DocContent | undefined)?.contents ?? null;
113 this.documentContent.set(docContent);
114 this.setTutorialData(data as TutorialNavigationItem);
115 });
116
117 const destroyRef = inject(DestroyRef);
118 afterNextRender(() => {
119 this.splitResizerHandler.init(
120 this.elementRef,
121 this.content()!,
122 this.resizer(),
123 this.editor(),
124 );

Callers

nothing calls this directly

Calls 4

injectFunction · 0.90
isPlatformBrowserFunction · 0.90
signalFunction · 0.90
requiredMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…