Skip to content

Commit 12eb005

Browse files
9kubczas4thePunderWoman
authored andcommitted
fix(docs-infra): skip navigation to card if user clicks on anchor (angular#57081)
fix(docs-infra): skip navigation to card if user clicks on anchor If user clicks on anchor inside member card (Reference) then skip navigation to card section and allow to navigate to anchor link. Use correct RxJs operator. Fix DI: destroy ReferenceScrollHandler when navigate outside of reference pages. fix: scroll to the of the card only after click on card header fix: remove import of filter operator PR Close angular#57081
1 parent 96ecb82 commit 12eb005

File tree

6 files changed

+25
-30
lines changed

6 files changed

+25
-30
lines changed

adev/src/app/app.config.server.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,9 @@
99
import {mergeApplicationConfig, ApplicationConfig} from '@angular/core';
1010
import {provideServerRendering} from '@angular/platform-server';
1111
import {appConfig} from './app.config';
12-
import {
13-
ReferenceScrollHandler,
14-
ReferenceScrollHandlerNoop,
15-
} from './features/references/services/reference-scroll-handler.service';
1612

1713
const serverConfig: ApplicationConfig = {
18-
providers: [
19-
provideServerRendering(),
20-
{provide: ReferenceScrollHandler, useClass: ReferenceScrollHandlerNoop},
21-
],
14+
providers: [provideServerRendering()],
2215
};
2316

2417
export const config = mergeApplicationConfig(appConfig, serverConfig);

adev/src/app/app.config.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ import {CustomErrorHandler} from './core/services/errors-handling/error-handler'
4545
import {ExampleContentLoader} from './core/services/example-content-loader.service';
4646
import {ReuseTutorialsRouteStrategy} from './features/tutorial/tutorials-route-reuse-strategy';
4747
import {routes} from './routes';
48-
import {ReferenceScrollHandler} from './features/references/services/reference-scroll-handler.service';
4948
import {CURRENT_MAJOR_VERSION} from './core/providers/current-version';
5049
import {AppScroller} from './app-scroller';
5150

@@ -106,6 +105,5 @@ export const appConfig: ApplicationConfig = {
106105
deps: [DOCUMENT],
107106
},
108107
{provide: TitleStrategy, useClass: ADevTitleStrategy},
109-
ReferenceScrollHandler,
110108
],
111109
};

adev/src/app/features/references/api-reference-details-page/api-reference-details-page.component.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,7 @@
270270
background-color: var(--octonary-contrast);
271271
position: relative;
272272
z-index: 10;
273+
cursor: pointer;
273274
transition:
274275
background-color 0.3s ease,
275276
border 0.3s ease;

adev/src/app/features/references/api-reference-details-page/api-reference-details-page.component.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import {AppScroller} from '../../../app-scroller';
4444
imports: [DocViewer, NgIf, NgFor, MatTabsModule, RouterLink],
4545
templateUrl: './api-reference-details-page.component.html',
4646
styleUrls: ['./api-reference-details-page.component.scss'],
47+
providers: [ReferenceScrollHandler],
4748
changeDetection: ChangeDetectionStrategy.OnPush,
4849
})
4950
export default class ApiReferenceDetailsPage implements OnInit, AfterViewInit {

adev/src/app/features/references/cli-reference-details-page/cli-reference-details-page.component.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ export const CLI_TOC = '.adev-reference-cli-toc';
3434
'./cli-reference-details-page.component.scss',
3535
'../api-reference-details-page/api-reference-details-page.component.scss',
3636
],
37+
providers: [ReferenceScrollHandler],
3738
changeDetection: ChangeDetectionStrategy.OnPush,
3839
})
3940
export default class CliReferenceDetailsPage implements OnInit {

adev/src/app/features/references/services/reference-scroll-handler.service.ts

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,45 +6,42 @@
66
* found in the LICENSE file at https://angular.dev/license
77
*/
88

9-
import {DOCUMENT} from '@angular/common';
9+
import {DOCUMENT, isPlatformBrowser} from '@angular/common';
1010
import {
1111
DestroyRef,
1212
EnvironmentInjector,
1313
Injectable,
1414
OnDestroy,
15+
PLATFORM_ID,
1516
afterNextRender,
1617
inject,
1718
signal,
1819
} from '@angular/core';
1920
import {takeUntilDestroyed} from '@angular/core/rxjs-interop';
2021
import {fromEvent} from 'rxjs';
21-
import {auditTime, skipWhile} from 'rxjs/operators';
22+
import {auditTime} from 'rxjs/operators';
2223
import {
2324
API_REFERENCE_DETAILS_PAGE_MEMBERS_CLASS_NAME,
2425
API_REFERENCE_MEMBER_CARD_CLASS_NAME,
2526
API_TAB_ACTIVE_CODE_LINE,
2627
MEMBER_ID_ATTRIBUTE,
2728
} from '../constants/api-reference-prerender.constants';
2829
import {WINDOW} from '@angular/docs';
29-
import {Router, Scroll} from '@angular/router';
30+
import {Router} from '@angular/router';
3031
import {AppScroller} from '../../../app-scroller';
3132

3233
export const SCROLL_EVENT_DELAY = 20;
3334
export const SCROLL_THRESHOLD = 20;
3435

35-
interface ReferenceScrollHandlerInterface {
36-
setupListeners(tocSelector: string): void;
37-
updateMembersMarginTop(selectorOfTheElementToAlign: string): void;
38-
}
39-
4036
@Injectable()
41-
export class ReferenceScrollHandler implements OnDestroy, ReferenceScrollHandlerInterface {
37+
export class ReferenceScrollHandler implements OnDestroy {
4238
private readonly destroyRef = inject(DestroyRef);
4339
private readonly document = inject(DOCUMENT);
4440
private readonly injector = inject(EnvironmentInjector);
4541
private readonly window = inject(WINDOW);
4642
private readonly router = inject(Router);
4743
private readonly appScroller = inject(AppScroller);
44+
private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
4845

4946
private readonly cardOffsetTop = new Map<string, number>();
5047
private resizeObserver: ResizeObserver | null = null;
@@ -56,6 +53,10 @@ export class ReferenceScrollHandler implements OnDestroy, ReferenceScrollHandler
5653
}
5754

5855
setupListeners(tocSelector: string): void {
56+
if (!this.isBrowser) {
57+
return;
58+
}
59+
5960
this.setupCodeToCListeners(tocSelector);
6061
this.setupMemberCardListeners();
6162
this.setScrollEventHandlers();
@@ -80,6 +81,10 @@ export class ReferenceScrollHandler implements OnDestroy, ReferenceScrollHandler
8081
}
8182

8283
updateMembersMarginTop(selectorOfTheElementToAlign: string): void {
84+
if (!this.isBrowser) {
85+
return;
86+
}
87+
8388
const elementToAlign = this.document.querySelector<HTMLElement>(selectorOfTheElementToAlign);
8489

8590
if (elementToAlign) {
@@ -113,11 +118,13 @@ export class ReferenceScrollHandler implements OnDestroy, ReferenceScrollHandler
113118
private setupMemberCardListeners(): void {
114119
this.getAllMemberCards().forEach((card) => {
115120
this.cardOffsetTop.set(card.id, card.offsetTop);
116-
fromEvent(card, 'click')
117-
.pipe(
118-
skipWhile((event) => event.target instanceof HTMLAnchorElement),
119-
takeUntilDestroyed(this.destroyRef),
120-
)
121+
const header = card.querySelector('header');
122+
123+
if (!header) {
124+
return;
125+
}
126+
fromEvent(header, 'click')
127+
.pipe(takeUntilDestroyed(this.destroyRef))
121128
.subscribe(() => {
122129
this.router.navigate([], {fragment: card.id, replaceUrl: true});
123130
});
@@ -247,9 +254,3 @@ export class ReferenceScrollHandler implements OnDestroy, ReferenceScrollHandler
247254
return null;
248255
}
249256
}
250-
251-
export class ReferenceScrollHandlerNoop implements ReferenceScrollHandlerInterface {
252-
membersMarginTopInPx = signal<number>(0);
253-
setupListeners(_tocSelector: string): void {}
254-
updateMembersMarginTop(_selectorOfTheElementToAlign: string): void {}
255-
}

0 commit comments

Comments
 (0)