client: add plugin support for external links (#6784)

* client: add plugin support for external links

* Styling

---------

Co-authored-by: Chocobozzz <me@florianbigard.com>
This commit is contained in:
kontrollanten 2025-01-14 11:18:07 +01:00 committed by GitHub
parent 3f30458c37
commit 85969c5a67
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 25 additions and 5 deletions

View File

@ -54,16 +54,26 @@
<ul class="ul-unstyle">
<li *ngFor="let link of menuSection.links">
@if (link.isPrimaryButton === true) {
<my-button class="d-block menu-button" [ngClass]="link.ngClass" theme="primary" [icon]="link.icon" [title]="link.label" [ptRouterLink]="link.path" [ptQueryParams]="link.query">
<my-button class="d-block menu-button" [ngClass]="link.ngClass" theme="primary" [icon]="link.icon" [title]="link.label" [ptRouterLink]="link.path" [ptQueryParams]="link.query" [href]="link.url">
@if (!collapsed) {
{{ link.label }}
}
</my-button>
} @else {
<a class="menu-link ellipsis" [routerLink]="link.path" [queryParams]="link.query" routerLinkActive="active" [ngClass]="link.ngClass" [title]="link.label">
<ng-template #linkTemplate>
<my-global-icon *ngIf="link.icon" [iconName]="link.icon" [ngClass]="link.iconClass" aria-hidden="true"></my-global-icon>
<span [ngClass]="{ 'visually-hidden': collapsed }">{{ link.label }}</span>
</a>
</ng-template>
@if (link.path) {
<a class="menu-link ellipsis" [routerLink]="link.path" [queryParams]="link.query" routerLinkActive="active" [ngClass]="link.ngClass" [title]="link.label">
<ng-container *ngTemplateOutlet="linkTemplate"></ng-container>
</a>
} @else {
<a class="menu-link ellipsis" [href]="link.url" [ngClass]="link.ngClass" [title]="link.label" target="_blank">
<ng-container *ngTemplateOutlet="linkTemplate"></ng-container>
</a>
}
}
</li>
</ul>

View File

@ -25,7 +25,8 @@ type MenuLink = {
label: string
path: string
path?: string
url?: string
query?: Params
isPrimaryButton?: boolean // default false

View File

@ -6,6 +6,14 @@
>
<ng-container *ngTemplateOutlet="content"></ng-container>
</a>
} @else if (href) {
<a
class="action-button"
[ngClass]="classes" [ngbTooltip]="tooltip" [attr.title]="title"
[href]="href" target="_blank"
>
<ng-container *ngTemplateOutlet="content"></ng-container>
</a>
} @else {
<button type="button" class="action-button" [ngClass]="classes" [disabled]="disabled" [ngbTooltip]="tooltip" [attr.title]="title">
<ng-container *ngTemplateOutlet="content"></ng-container>

View File

@ -44,6 +44,7 @@ export class ButtonComponent implements OnChanges, AfterViewInit {
@Input() theme: 'primary' | 'secondary' | 'tertiary' = 'secondary'
@Input() icon: GlobalIconName
@Input() href: string
@Input() ptRouterLink: string[] | string
@Input() ptQueryParams: Params
@Input() ptQueryParamsHandling: QueryParamsHandling
@ -73,7 +74,7 @@ export class ButtonComponent implements OnChanges, AfterViewInit {
}
private buildClasses () {
const isButtonLink = !!this.ptRouterLink
const isButtonLink = !!this.ptRouterLink || !!this.href
this.classes = {
'active': this.active,