1- import { Component , OnDestroy } from '@angular/core' ;
1+ import { Component , ElementRef , NgZone , OnDestroy , OnInit , ViewChild } from '@angular/core' ;
22import { Store } from '@ngrx/store' ;
33import { ActivatedRoute } from '@angular/router' ;
44import { RepoContents , fetchRepository , selectedRepository } from '../../state/repository' ;
5- import { map , takeWhile , tap } from 'rxjs' ;
5+ import { map , take , takeWhile , tap } from 'rxjs' ;
66
77@Component ( {
88 selector : 'app-file-explorer' ,
99 templateUrl : './file-explorer.component.html' ,
1010 styleUrls : [ './file-explorer.component.scss' ] ,
1111} )
12- export class FileExplorerComponent implements OnDestroy {
12+ export class FileExplorerComponent implements OnInit , OnDestroy {
13+ @ViewChild ( 'readme' ) readmeContainer : ElementRef | undefined ;
14+
15+ private componentActive = true ;
16+
1317 owner = '' ;
1418 repoName = '' ;
1519 path = '' ;
@@ -29,10 +33,18 @@ export class FileExplorerComponent implements OnDestroy {
2933
3034 return { ...repo , tree : dirItems . concat ( fileItems ) } ;
3135 } ) ,
36+ tap ( ( ) => {
37+ // make sure the readme is scrolled into view if the fragment is set
38+ // we need to wait for the readme to be rendered before we can scroll to it
39+ this . zone . onStable . pipe ( take ( 1 ) ) . subscribe ( ( ) => {
40+ if ( this . route . snapshot . fragment === 'readme' ) {
41+ this . readmeContainer ?. nativeElement ?. scrollIntoView ( ) ;
42+ }
43+ } ) ;
44+ } ) ,
3245 ) ;
33- private componentActive = true ;
3446
35- constructor ( private route : ActivatedRoute , private store : Store ) { }
47+ constructor ( private route : ActivatedRoute , private store : Store , private zone : NgZone ) { }
3648
3749
3850 ngOnInit ( ) {
@@ -57,7 +69,8 @@ export class FileExplorerComponent implements OnDestroy {
5769 . subscribe ( ) ;
5870 }
5971
60- ngOnDestroy ( ) : void {
72+ ngOnDestroy ( ) {
6173 this . componentActive = false ;
6274 }
75+
6376}
0 commit comments