},
{
path: 'configuration',
- data: { breadcrumbs: 'Cluster/Configuration Documentation' },
+ data: { breadcrumbs: 'Cluster/Configuration' },
children: [
{ path: '', component: ConfigurationComponent },
{
--- /dev/null
+export class ConfigFormCreateRequestModel {
+ name: string;
+ value: Array<any> = [];
+}
<!-- Footer -->
<div class="panel-footer">
<div class="button-group text-right">
+ <cd-submit-button [form]="formDir"
+ type="button"
+ (submitAction)="submit()">
+ <span i18n>Save</span>
+ </cd-submit-button>
<button type="button"
class="btn btn-sm btn-default"
routerLink="/configuration"
import { ActivatedRoute } from '@angular/router';
import { RouterTestingModule } from '@angular/router/testing';
+import { ToastModule } from 'ng2-toastr';
+
import { configureTestBed } from '../../../../../testing/unit-test-helper';
import { SharedModule } from '../../../../shared/shared.module';
import { ConfigurationFormComponent } from './configuration-form.component';
let activatedRoute: ActivatedRoute;
configureTestBed({
- imports: [HttpClientTestingModule, ReactiveFormsModule, RouterTestingModule, SharedModule],
+ imports: [
+ HttpClientTestingModule,
+ ReactiveFormsModule,
+ RouterTestingModule,
+ ToastModule.forRoot(),
+ SharedModule
+ ],
declarations: [ConfigurationFormComponent],
providers: [
{
import { FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms';
import { ActivatedRoute, Router } from '@angular/router';
+import * as _ from 'lodash';
+
import { ConfigurationService } from '../../../../shared/api/configuration.service';
+import { NotificationType } from '../../../../shared/enum/notification-type.enum';
import { CdFormGroup } from '../../../../shared/forms/cd-form-group';
import { CdValidators } from '../../../../shared/forms/cd-validators';
+import { NotificationService } from '../../../../shared/services/notification.service';
+import { ConfigFormCreateRequestModel } from './configuration-form-create-request.model';
import { ConfigFormModel } from './configuration-form.model';
@Component({
constructor(
private route: ActivatedRoute,
private router: Router,
- private configService: ConfigurationService
+ private configService: ConfigurationService,
+ private notificationService: NotificationService
) {
this.createForm();
}
this.inputType = currentType.inputType;
this.humanReadableType = currentType.humanReadable;
}
+
+ createRequest(): ConfigFormCreateRequestModel | null {
+ const values = [];
+
+ this.availSections.forEach((section) => {
+ const sectionValue = this.configForm.getValue(section);
+ if (sectionValue) {
+ values.push({ section: section, value: sectionValue });
+ }
+ });
+
+ if (!_.isEqual(this.response.value, values)) {
+ const request = new ConfigFormCreateRequestModel();
+ request.name = this.configForm.getValue('name');
+ request.value = values;
+ return request;
+ }
+
+ return null;
+ }
+
+ submit() {
+ const request = this.createRequest();
+
+ if (request) {
+ this.configService.create(request).subscribe(
+ () => {
+ this.notificationService.show(
+ NotificationType.success,
+ 'Config option ' + request.name + ' has been updated.',
+ 'Update config option'
+ );
+ this.router.navigate(['/configuration']);
+ },
+ () => {
+ this.configForm.setErrors({ cdSubmitButton: true });
+ }
+ );
+ }
+
+ this.router.navigate(['/configuration']);
+ }
}
*ngIf="permissions.configOpt.read">
<a i18n
class="dropdown-item"
- routerLink="/configuration">Configuration Doc.
+ routerLink="/configuration">Configuration
</a>
</li>
</ul>
import { TestBed } from '@angular/core/testing';
import { configureTestBed } from '../../../testing/unit-test-helper';
+import { ConfigFormCreateRequestModel } from '../../ceph/cluster/configuration/configuration-form/configuration-form-create-request.model';
import { ConfigurationService } from './configuration.service';
describe('ConfigurationService', () => {
const req = httpTesting.expectOne('api/cluster_conf/configOption');
expect(req.request.method).toBe('GET');
});
+
+ it('should call create', () => {
+ const configOption = new ConfigFormCreateRequestModel();
+ configOption.name = 'Test option';
+ configOption.value = [
+ { section: 'section1', value: 'value1' },
+ { section: 'section2', value: 'value2' }
+ ];
+ service.create(configOption).subscribe();
+ const req = httpTesting.expectOne('api/cluster_conf/');
+ expect(req.request.method).toBe('POST');
+ expect(req.request.body).toEqual(configOption);
+ });
});
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
+import { ConfigFormCreateRequestModel } from '../../ceph/cluster/configuration/configuration-form/configuration-form-create-request.model';
import { ApiModule } from './api.module';
@Injectable({
get(configOption: string) {
return this.http.get(`api/cluster_conf/${configOption}`);
}
+
+ create(configOption: ConfigFormCreateRequestModel) {
+ return this.http.post('api/cluster_conf/', configOption);
+ }
}