import { Component, inject, OnInit } from '@angular/core'; import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatIconModule } from '@angular/material/icon'; import { HermesClientService } from '../../hermes-client.service'; import { Group } from '../../shared/models/group'; import { Permission } from '../../shared/models/permission'; import { MatSelectModule } from '@angular/material/select'; import { MatInputModule } from '@angular/material/input'; import { PolicyDropdownComponent } from "../../policies/policy-dropdown/policy-dropdown.component"; @Component({ selector: 'permission-item-edit', imports: [ MatButtonModule, MatCardModule, MatFormFieldModule, MatIconModule, MatInputModule, MatSelectModule, ReactiveFormsModule, PolicyDropdownComponent, ], templateUrl: './permission-item-edit.component.html', styleUrl: './permission-item-edit.component.scss' }) export class PermissionItemEditComponent implements OnInit { private readonly client = inject(HermesClientService); readonly data = inject<{ permission: Permission, group: Group, groups: Group[], isNew: boolean }>(MAT_DIALOG_DATA); readonly dialogRef = inject(MatDialogRef); readonly pathControl = new FormControl('', [Validators.required]); readonly stateControl = new FormControl(null, [Validators.required]); private form = new FormGroup({ path: this.pathControl, state: this.stateControl, }); readonly states: { label: string, value: boolean | null }[] = [ { label: 'Allow', value: true }, { label: 'Deny', value: false }, ] responseError: string | undefined; waitForResponse = false; ngOnInit() { this.pathControl.setValue(this.data.permission.path); this.stateControl.setValue(this.data.permission.allow); } submit() { if (this.form.invalid || this.waitForResponse) { return; } this.waitForResponse = true; this.responseError = undefined; if (this.data.isNew) { this.client.first((d: any) => d.op == 4 && d.d.request.type == 'create_group_permission' && d.d.request.data.path == this.pathControl.value) .subscribe({ next: (d) => { if (d.d.error) { this.responseError = d.d.error; } else { this.dialogRef.close(d.d.data); } }, error: () => this.responseError = 'Something went wrong.', complete: () => this.waitForResponse = false, }); this.client.createGroupPermission(this.data.group.id, this.pathControl.value!, this.stateControl.value); } else { this.client.first((d: any) => d.op == 4 && d.d.request.type == 'update_group_permission' && d.d.request.data.id == this.data.permission.id) .subscribe({ next: (d) => { if (d.d.error) { this.responseError = d.d.error; } else { this.dialogRef.close(d.d.data); } }, error: () => this.responseError = 'Something went wrong.', complete: () => this.waitForResponse = false, }); this.client.updateGroupPermission(this.data.permission.id, this.data.group.id, this.pathControl.value!, this.stateControl.value); } } }