import { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core'; import { CommonModule } from '@angular/common'; import { FormsModule } from '@angular/forms'; import { AdminUsersFacade } from '../facade/admin-users.facade'; import { AdminUserScope, AdminUserStatus } from '../models/admin-user.model'; import { TranslatePipe } from '../../../../i18n/translate.pipe'; import { TranslateService } from '../../../../i18n/translate.service'; import { ButtonComponent } from '../../../../shared/ui/button/button.component'; import { InputComponent } from '../../../../shared/ui/input/input.component'; import { BadgeComponent } from '../../../../shared/ui/badge/badge.component'; import { TableComponent } from '../../../../shared/ui/table/table.component'; import { DialogComponent } from '../../../../shared/ui/dialog/dialog.component'; @Component({ selector: 'app-admin-users-page', standalone: true, imports: [CommonModule, FormsModule, TranslatePipe, ButtonComponent, InputComponent, BadgeComponent, TableComponent, DialogComponent], templateUrl: './admin-users-page.component.html', styleUrls: ['./admin-users-page.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush }) export class AdminUsersPageComponent { readonly facade = inject(AdminUsersFacade); private readonly translate = inject(TranslateService); readonly inviteEmail = signal(''); readonly inviteRoleId = signal('viewer'); readonly inviteScope = signal('office'); constructor() { this.facade.loadAll(); } sendInvite(): void { this.facade.invite(this.inviteEmail(), this.inviteRoleId(), this.inviteScope()); this.inviteEmail.set(''); } toggleStatus(userId: string, current: AdminUserStatus): void { const next: AdminUserStatus = current === 'suspended' ? 'active' : 'suspended'; if (next === 'suspended' && !window.confirm(this.translate.t('adminUsers.confirmSuspend'))) { return; } this.facade.setStatus(userId, next); } }