hermes-web-angular/src/app/permissions/permission-item-edit/permission-item-edit.component.ts

99 lines
3.5 KiB
TypeScript

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<PermissionItemEditComponent>);
readonly pathControl = new FormControl('', [Validators.required]);
readonly stateControl = new FormControl<boolean | null>(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);
}
}
}