]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/dashboard: CdFormBuilder
authorStephan Müller <smueller@suse.com>
Mon, 25 Jun 2018 09:33:10 +0000 (11:33 +0200)
committerStephan Müller <smueller@suse.com>
Tue, 3 Jul 2018 15:42:32 +0000 (17:42 +0200)
Now the form builder can be used to build CdFormGroups.

Signed-off-by: Stephan Müller <smueller@suse.com>
src/pybind/mgr/dashboard/frontend/src/app/shared/forms/cd-form-builder.spec.ts [new file with mode: 0644]
src/pybind/mgr/dashboard/frontend/src/app/shared/forms/cd-form-builder.ts [new file with mode: 0644]

diff --git a/src/pybind/mgr/dashboard/frontend/src/app/shared/forms/cd-form-builder.spec.ts b/src/pybind/mgr/dashboard/frontend/src/app/shared/forms/cd-form-builder.spec.ts
new file mode 100644 (file)
index 0000000..07e7f00
--- /dev/null
@@ -0,0 +1,32 @@
+import { Validators } from '@angular/forms';
+import { CdFormBuilder } from './cd-form-builder';
+import { CdFormGroup } from './cd-form-group';
+
+describe('cd-form-builder', () => {
+  let service: CdFormBuilder;
+
+  beforeEach(() => {
+    service = new CdFormBuilder();
+  });
+
+  it('should be created', () => {
+    expect(service).toBeTruthy();
+  });
+
+  it('should create a nested CdFormGroup', () => {
+    const form = service.group({
+      nested: service.group({
+        a: [null],
+        b: ['sth'],
+        c: [2, [Validators.min(3)]]
+      }),
+      d: [{ e: 3 }],
+      f: [true]
+    });
+    expect(form.constructor).toBe(CdFormGroup);
+    expect(form instanceof CdFormGroup).toBeTruthy();
+    expect(form.getValue('b')).toBe('sth');
+    expect(form.getValue('d')).toEqual({ e: 3 });
+    expect(form.get('c').valid).toBeFalsy();
+  });
+});
diff --git a/src/pybind/mgr/dashboard/frontend/src/app/shared/forms/cd-form-builder.ts b/src/pybind/mgr/dashboard/frontend/src/app/shared/forms/cd-form-builder.ts
new file mode 100644 (file)
index 0000000..e2710d0
--- /dev/null
@@ -0,0 +1,21 @@
+import { Injectable } from '@angular/core';
+import { FormBuilder } from '@angular/forms';
+
+import { ServicesModule } from '../services/services.module';
+import { CdFormGroup } from './cd-form-group';
+
+/**
+ * CdFormBuilder extends FormBuilder to create an CdFormGroup based form.
+ */
+@Injectable({
+  providedIn: ServicesModule
+})
+export class CdFormBuilder extends FormBuilder {
+  group(
+    controlsConfig: { [key: string]: any },
+    extra: { [key: string]: any } | null = null
+  ): CdFormGroup {
+    const form = super.group(controlsConfig, extra);
+    return new CdFormGroup(form.controls, form.validator, form.asyncValidator);
+  }
+}