File

src/lib/error-capture-dialog/error-capture-dialog.component.ts

Metadata

Index

Properties

Properties

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
Component
Html element with directive

results matching ""

    No results matching ""