99 lines
3.5 KiB
TypeScript
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);
|
|
}
|
|
}
|
|
}
|