Skip to content

Commit 9d450d0

Browse files
feat(blog): new image banner (#307)
1 parent fbb915a commit 9d450d0

File tree

7 files changed

+67
-1
lines changed

7 files changed

+67
-1
lines changed
236 KB
Loading

libs/blog/ad-banner/ui/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
export * from './lib/ad-banner/ad-banner.component';
2+
export * from './lib/ad-image-banner/ad-image-banner.component';
3+
export * from './lib/ad-image-banner/ad-image-banner-data.interface';
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export interface AdImageBanner {
2+
url: string;
3+
alt: string;
4+
slug: string;
5+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<aside>
2+
<img
3+
tabindex="0"
4+
role="button"
5+
class="!relative cursor-pointer"
6+
[attr.aria-label]="banner().alt"
7+
[ngSrc]="banner().url"
8+
(click)="navigateFromBanner()"
9+
(keydown.enter)="navigateFromBanner()"
10+
fill
11+
priority
12+
/>
13+
</aside>
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { NgOptimizedImage } from '@angular/common';
2+
import { Component, inject, input } from '@angular/core';
3+
import { Router } from '@angular/router';
4+
5+
import { AlLocalizeService } from '@angular-love/blog/i18n/util';
6+
7+
import { AdImageBanner } from './ad-image-banner-data.interface';
8+
9+
@Component({
10+
selector: 'al-ad-image-banner',
11+
standalone: true,
12+
imports: [NgOptimizedImage],
13+
templateUrl: './ad-image-banner.component.html',
14+
})
15+
export class AdImageBannerComponent {
16+
banner = input.required<AdImageBanner>();
17+
18+
private readonly _router = inject(Router);
19+
private readonly _localizeService = inject(AlLocalizeService);
20+
21+
navigateFromBanner(): void {
22+
this._router.navigate(
23+
this._localizeService.localizePath(['/', this.banner()!.slug]),
24+
);
25+
}
26+
}

libs/blog/home/feature-home/src/lib/home-page/home-page.component.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
<al-ad-image-banner [banner]="banner()!"></al-ad-image-banner>
12
<al-latest-articles />
23
<al-articles-list />
34
<al-partners [partnerList]="[hoaHireUs]" title="homePage.mainPartner" />

libs/blog/home/feature-home/src/lib/home-page/home-page.component.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1-
import { ChangeDetectionStrategy, Component } from '@angular/core';
1+
import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
2+
import { toSignal } from '@angular/core/rxjs-interop';
23
import { ReactiveFormsModule } from '@angular/forms';
4+
import { TranslocoService } from '@jsverse/transloco';
5+
import { map } from 'rxjs';
36

47
import { ArticlesListContainerComponent } from '@angular-love/blog/articles/feature-list';
58
import { UiArticleCardComponent } from '@angular-love/blog/articles/ui-article-card';
69
import { NewsletterComponent } from '@angular-love/blog/newsletter';
710
import { PartnersComponent } from '@angular-love/blog/partners/ui-partners';
11+
import { AdImageBannerComponent } from '@angular-love/blog/shared/ad-banner';
812
import { CardComponent } from '@angular-love/blog/shared/ui-card';
913
import { FeatureLatestArticlesComponent } from '@angular-love/feature-latest-articles';
1014

@@ -22,6 +26,7 @@ import { hoaHireUs, partnersList } from './partners';
2226
FeatureLatestArticlesComponent,
2327
UiArticleCardComponent,
2428
ArticlesListContainerComponent,
29+
AdImageBannerComponent,
2530
],
2631
templateUrl: './home-page.component.html',
2732
styleUrls: ['./home-page.component.scss'],
@@ -30,4 +35,18 @@ import { hoaHireUs, partnersList } from './partners';
3035
export class HomePageComponent {
3136
protected readonly hoaHireUs = hoaHireUs;
3237
protected readonly partnersList = partnersList;
38+
private readonly _translocoService = inject(TranslocoService);
39+
40+
readonly banner = toSignal(
41+
this._translocoService.langChanges$.pipe(
42+
map((activeLang) => ({
43+
url: 'assets/AL-AID-banner.png',
44+
alt: 'Banner - Two blogs join forces',
45+
slug:
46+
activeLang === 'en'
47+
? 'angular-love-joins-forces-with-angular-in-depth-to-bring-you-the-best-angular-on-the-web'
48+
: 'laczymy-sily-z-angular-in-depth-by-dostarczyc-wam-najlepsze-tresci-o-angularze',
49+
})),
50+
),
51+
);
3352
}

0 commit comments

Comments
 (0)