File
|
Protected
Readonly
_data
|
Default value : inject<ErrorCaptureDialogData>(MAT_DIALOG_DATA)
|
|
|
|
Public
Readonly
activeIndex
|
Default value : signal(0)
|
|
|
|
Public
Readonly
component
|
Default value : this._data.component
|
|
|
|
Public
Readonly
componentPortal
|
Default value : computed(() => {
const index = this.activeIndex();
const data = this.data();
const injector = Injector.create({
parent: this.injector,
providers: [
{
provide: RXAP_ERROR_DIALOG_ERROR,
useValue: data[index],
},
],
});
return new ComponentPortal(this.component, null, injector);
})
|
|
|
|
Public
Readonly
data
|
Default value : this._data.errorList
|
|
|
|
Public
Readonly
displayedButtons
|
Default value : computed(() => {
const start = Math.max(0, this.activeIndex() - 2);
const end = Math.min(this.data().length, start + 5);
return Array.from({ length: end - start }, (_, i) => start + i);
})
|
|
|
|
Public
Readonly
injector
|
Default value : inject(INJECTOR)
|
|
|
import {
CdkPortalOutlet,
ComponentPortal,
} from '@angular/cdk/portal';
import { NgClass } from '@angular/common';
import {
Component,
computed,
inject,
INJECTOR,
Injector,
signal,
} from '@angular/core';
import { MatButton } from '@angular/material/button';
import {
MAT_DIALOG_DATA,
MatDialogActions,
MatDialogClose,
MatDialogContent,
} from '@angular/material/dialog';
import { RXAP_ERROR_DIALOG_ERROR } from '@rxap/ngx-error';
import { ErrorCaptureDialogData } from './types';
@Component({
selector: 'rxap-component-dialog',
imports: [
MatButton,
MatDialogActions,
MatDialogContent,
MatDialogClose,
CdkPortalOutlet,
NgClass,
],
templateUrl: './error-capture-dialog.component.html',
styleUrl: './error-capture-dialog.component.scss',
})
export class ErrorCaptureDialogComponent {
protected readonly _data = inject<ErrorCaptureDialogData>(MAT_DIALOG_DATA);
public readonly component = this._data.component;
public readonly injector = inject(INJECTOR);
public readonly componentPortal = computed(() => {
const index = this.activeIndex();
const data = this.data();
const injector = Injector.create({
parent: this.injector,
providers: [
{
provide: RXAP_ERROR_DIALOG_ERROR,
useValue: data[index],
},
],
});
return new ComponentPortal(this.component, null, injector);
});
public readonly data = this._data.errorList;
public readonly activeIndex = signal(0);
public readonly displayedButtons = computed(() => {
const start = Math.max(0, this.activeIndex() - 2);
const end = Math.min(this.data().length, start + 5);
return Array.from({ length: end - start }, (_, i) => start + i);
});
}
@if (data().length > 1) {
<div class="controls flex justify-center space-x-2 mt-4">
<button mat-flat-button (click)="activeIndex.set(activeIndex() - 1)" [disabled]="activeIndex() === 0">
<ng-container i18n>Previous</ng-container>
</button>
@for (item of displayedButtons(); track item) {
<button (click)="activeIndex.set(item)"
mat-stroked-button
[ngClass]="{ 'active': item === activeIndex() }">
{{ item + 1 }}
</button>
}
<button mat-flat-button (click)="activeIndex.set(activeIndex() + 1)" [disabled]="activeIndex() >= data().length - 1">
<ng-container i18n>Next</ng-container>
</button>
</div>
}
<mat-dialog-content>
<ng-template [cdkPortalOutlet]="componentPortal()"></ng-template>
</mat-dialog-content>
<mat-dialog-actions>
<button [mat-dialog-close]="true" mat-button>
<ng-container i18n>Close</ng-container>
</button>
</mat-dialog-actions>
Legend
Html element with directive