1- import { Component , OnDestroy , OnInit } from '@angular/core' ;
1+ import {
2+ Component ,
3+ ElementRef ,
4+ NgZone ,
5+ OnDestroy ,
6+ OnInit ,
7+ ViewChild ,
8+ } from '@angular/core' ;
29import { Store } from '@ngrx/store' ;
310import { ActivatedRoute } from '@angular/router' ;
411import {
512 RepoContents ,
613 fetchRepository ,
714 selectedRepository ,
815} from '../../state/repository' ;
9- import { map , takeWhile , tap } from 'rxjs' ;
16+ import { map , take , takeWhile , tap } from 'rxjs' ;
1017
1118@Component ( {
1219 selector : 'app-file-explorer' ,
1320 templateUrl : './file-explorer.component.html' ,
1421 styleUrls : [ './file-explorer.component.scss' ] ,
1522} )
1623export class FileExplorerComponent implements OnInit , OnDestroy {
24+ @ViewChild ( 'readme' ) readmeContainer : ElementRef | undefined ;
25+
26+ private componentActive = true ;
27+
1728 owner = '' ;
1829 repoName = '' ;
1930 path = '' ;
@@ -33,10 +44,22 @@ export class FileExplorerComponent implements OnInit, OnDestroy {
3344
3445 return { ...repo , tree : dirItems . concat ( fileItems ) } ;
3546 } ) ,
47+ tap ( ( ) => {
48+ // make sure the readme is scrolled into view if the fragment is set
49+ // we need to wait for the readme to be rendered before we can scroll to it
50+ this . zone . onStable . pipe ( take ( 1 ) ) . subscribe ( ( ) => {
51+ if ( this . route . snapshot . fragment === 'readme' ) {
52+ this . readmeContainer ?. nativeElement ?. scrollIntoView ( ) ;
53+ }
54+ } ) ;
55+ } ) ,
3656 ) ;
37- private componentActive = true ;
3857
39- constructor ( private route : ActivatedRoute , private store : Store ) { }
58+ constructor (
59+ private route : ActivatedRoute ,
60+ private store : Store ,
61+ private zone : NgZone ,
62+ ) { }
4063
4164 ngOnInit ( ) {
4265 this . route . paramMap
@@ -60,7 +83,7 @@ export class FileExplorerComponent implements OnInit, OnDestroy {
6083 . subscribe ( ) ;
6184 }
6285
63- ngOnDestroy ( ) : void {
86+ ngOnDestroy ( ) {
6487 this . componentActive = false ;
6588 }
6689}
0 commit comments