import { UikitFieldComponent } from '@/uikit'; import { DOCUMENT } from '@angular/common'; import { Component, Inject, computed, inject, Input } from '@angular/core'; import { ReactiveFormsModule } from '@angular/forms'; import { Select } from 'primeng/select'; import { Observable } from 'rxjs'; import { AbstractSelectComponent } from '../abstractClasses'; import { apiEnumTranslates } from './constants'; import { IApiEnumResponse, TEnumApi } from './models'; import { EnumsService } from './services'; @Component({ selector: 'app-enum-select', templateUrl: './select.component.html', imports: [UikitFieldComponent, Select, ReactiveFormsModule], }) export class EnumSelectComponent extends AbstractSelectComponent { @Input({ required: true }) type!: TEnumApi; @Input() name?: string; @Input() customLabel?: string; private readonly service = inject(EnumsService); constructor(@Inject(DOCUMENT) private readonly document: Document) { super(); } label = computed(() => this.customLabel ?? apiEnumTranslates[this.type]); override getDataService(): Observable { return this.service.getAll(this.type); } ngOnInit() { this.getData(); } overlayOptions() { return { autoZIndex: true, baseZIndex: this.overlayBaseZIndex(), }; } overlayBaseZIndex() { const drawers = Array.from(this.document.body.querySelectorAll('.p-drawer,[data-pc-name="drawer"]')) as HTMLElement[]; const zIndexes = drawers .map((drawer) => Number.parseInt(drawer.style.zIndex || '0', 10)) .filter((zIndex) => Number.isFinite(zIndex) && zIndex > 0); return zIndexes.length ? Math.max(...zIndexes) + 2 : 1000; } }