Browse Source

More typed forms.

pull/355/head
Sebastian Stehle 7 years ago
parent
commit
f805ae850c
  1. 2
      src/Squidex/app/features/administration/pages/restore/restore-page.component.ts
  2. 3
      src/Squidex/app/features/administration/pages/users/user-page.component.ts
  3. 26
      src/Squidex/app/features/administration/state/users.forms.ts
  4. 4
      src/Squidex/app/features/rules/pages/rules/rule-wizard.component.ts
  5. 4
      src/Squidex/app/features/schemas/pages/schema/field-wizard.component.ts
  6. 4
      src/Squidex/app/features/schemas/pages/schema/schema-preview-urls-form.component.ts
  7. 2
      src/Squidex/app/features/schemas/pages/schemas/schema-form.component.ts
  8. 2
      src/Squidex/app/features/schemas/pages/schemas/schemas-page.component.ts
  9. 2
      src/Squidex/app/features/settings/pages/clients/clients-page.component.ts
  10. 2
      src/Squidex/app/features/settings/pages/contributors/contributors-page.component.ts
  11. 2
      src/Squidex/app/features/settings/pages/patterns/pattern.component.ts
  12. 2
      src/Squidex/app/features/settings/pages/roles/role.component.ts
  13. 2
      src/Squidex/app/features/settings/pages/roles/roles-page.component.ts
  14. 22
      src/Squidex/app/framework/state.ts
  15. 2
      src/Squidex/app/shared/components/comments.component.ts
  16. 4
      src/Squidex/app/shared/services/schemas.service.spec.ts
  17. 2
      src/Squidex/app/shared/state/apps.forms.ts
  18. 4
      src/Squidex/app/shared/state/assets.forms.ts
  19. 6
      src/Squidex/app/shared/state/backups.forms.ts
  20. 4
      src/Squidex/app/shared/state/clients.forms.ts
  21. 2
      src/Squidex/app/shared/state/comments.form.ts
  22. 6
      src/Squidex/app/shared/state/contents.forms.ts
  23. 4
      src/Squidex/app/shared/state/contributors.forms.ts
  24. 6
      src/Squidex/app/shared/state/languages.forms.ts
  25. 2
      src/Squidex/app/shared/state/patterns.forms.ts
  26. 10
      src/Squidex/app/shared/state/roles.forms.ts
  27. 60
      src/Squidex/app/shared/state/schemas.forms.ts

2
src/Squidex/app/features/administration/pages/restore/restore-page.component.ts

@ -51,7 +51,7 @@ export class RestorePageComponent extends ResourceOwner implements OnInit {
const value = this.restoreForm.submit(); const value = this.restoreForm.submit();
if (value) { if (value) {
this.restoreForm.submitCompleted({}); this.restoreForm.submitCompleted({ url: '' });
this.backupsService.postRestore(value) this.backupsService.postRestore(value)
.subscribe(() => { .subscribe(() => {

3
src/Squidex/app/features/administration/pages/users/user-page.component.ts

@ -12,6 +12,7 @@ import { ActivatedRoute, Router } from '@angular/router';
import { ResourceOwner } from '@app/shared'; import { ResourceOwner } from '@app/shared';
import { import {
CreateUserDto,
UserDto, UserDto,
UserForm, UserForm,
UsersState UsersState
@ -61,7 +62,7 @@ export class UserPageComponent extends ResourceOwner implements OnInit {
this.userForm.submitFailed(error); this.userForm.submitFailed(error);
}); });
} else { } else {
this.usersState.create(value) this.usersState.create(<CreateUserDto>value)
.subscribe(() => { .subscribe(() => {
this.back(); this.back();
}, error => { }, error => {

26
src/Squidex/app/features/administration/state/users.forms.ts

@ -2,9 +2,9 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { Form, ValidatorsEx } from '@app/shared'; import { Form, ValidatorsEx } from '@app/shared';
import { UserDto } from './../services/users.service'; import { UpdateUserDto } from './../services/users.service';
export class UserForm extends Form<FormGroup> { export class UserForm extends Form<FormGroup, UpdateUserDto> {
constructor( constructor(
formBuilder: FormBuilder formBuilder: FormBuilder
) { ) {
@ -36,25 +36,11 @@ export class UserForm extends Form<FormGroup> {
})); }));
} }
public load(user?: UserDto) { protected transformLoad(user: UpdateUserDto) {
if (user) { return { ...user, permissions: user.permissions.join('\n') };
this.form.controls['password'].setValidators(null);
super.load({ ...user, permissions: user.permissions.join('\n') });
} else {
this.form.controls['password'].setValidators(Validators.required);
super.load(undefined);
}
} }
public submit() { protected transformSubmit(value: any): UpdateUserDto {
const result = super.submit(); return { ...value, permissions: value['permissions'].split('\n').filter((x: any) => !!x) };
if (result) {
result['permissions'] = result['permissions'].split('\n').filter((x: any) => !!x);
}
return result;
} }
} }

4
src/Squidex/app/features/rules/pages/rules/rule-wizard.component.ts

@ -27,11 +27,11 @@ export const MODE_EDIT_ACTION = 'EditAction';
templateUrl: './rule-wizard.component.html' templateUrl: './rule-wizard.component.html'
}) })
export class RuleWizardComponent implements OnInit { export class RuleWizardComponent implements OnInit {
public actionForm = new Form<FormGroup>(new FormGroup({})); public actionForm = new Form<FormGroup, any>(new FormGroup({}));
public actionType: string; public actionType: string;
public action: any = {}; public action: any = {};
public triggerForm = new Form<FormGroup>(new FormGroup({})); public triggerForm = new Form<FormGroup, any>(new FormGroup({}));
public triggerType: string; public triggerType: string;
public trigger: any = {}; public trigger: any = {};

4
src/Squidex/app/features/schemas/pages/schema/field-wizard.component.ts

@ -21,6 +21,8 @@ import {
Types Types
} from '@app/shared'; } from '@app/shared';
const DEFAULT_FIELD = { name: '', partitioning: 'invariant', properties: createProperties('String') };
@Component({ @Component({
selector: 'sqx-field-wizard', selector: 'sqx-field-wizard',
styleUrls: ['./field-wizard.component.scss'], styleUrls: ['./field-wizard.component.scss'],
@ -73,7 +75,7 @@ export class FieldWizardComponent implements OnInit {
.subscribe(dto => { .subscribe(dto => {
this.field = dto; this.field = dto;
this.addFieldForm.submitCompleted({ type: fieldTypes[0].type }); this.addFieldForm.submitCompleted({ ...DEFAULT_FIELD });
if (addNew) { if (addNew) {
if (Types.isFunction(this.nameInput.nativeElement.focus)) { if (Types.isFunction(this.nameInput.nativeElement.focus)) {

4
src/Squidex/app/features/schemas/pages/schema/schema-preview-urls-form.component.ts

@ -46,7 +46,7 @@ export class SchemaPreviewUrlsFormComponent implements OnInit {
} }
public cancelAdd() { public cancelAdd() {
this.addForm.submitCompleted({}); this.addForm.submitCompleted({ name: '', url: '' });
} }
public add() { public add() {
@ -55,7 +55,7 @@ export class SchemaPreviewUrlsFormComponent implements OnInit {
if (value) { if (value) {
this.editForm.add(value); this.editForm.add(value);
this.addForm.submitCompleted({}); this.cancelAdd();
} }
} }

2
src/Squidex/app/features/schemas/pages/schemas/schema-form.component.ts

@ -44,7 +44,7 @@ export class SchemaFormComponent implements OnInit {
} }
public ngOnInit() { public ngOnInit() {
this.createForm.load({ import: this.import }); this.createForm.load({ name: '', import: this.import });
this.showImport = !!this.import; this.showImport = !!this.import;
} }

2
src/Squidex/app/features/schemas/pages/schemas/schemas-page.component.ts

@ -77,7 +77,7 @@ export class SchemasPageComponent extends ResourceOwner implements OnInit {
try { try {
this.schemasState.addCategory(value.name); this.schemasState.addCategory(value.name);
} finally { } finally {
this.addCategoryForm.submitCompleted({}); this.addCategoryForm.submitCompleted({ name: '' });
} }
} }
} }

2
src/Squidex/app/features/settings/pages/clients/clients-page.component.ts

@ -47,7 +47,7 @@ export class ClientsPageComponent implements OnInit {
const value = this.addClientForm.submit(); const value = this.addClientForm.submit();
if (value) { if (value) {
this.clientsState.attach(value) this.clientsState.attach({ id: value.name })
.subscribe(() => { .subscribe(() => {
this.addClientForm.submitCompleted(); this.addClientForm.submitCompleted();
}, error => { }, error => {

2
src/Squidex/app/features/settings/pages/contributors/contributors-page.component.ts

@ -99,7 +99,7 @@ export class ContributorsPageComponent implements OnInit {
this.contributorsState.assign(requestDto) this.contributorsState.assign(requestDto)
.subscribe(isCreated => { .subscribe(isCreated => {
this.assignContributorForm.submitCompleted({}); this.assignContributorForm.submitCompleted({ user: '' });
if (isCreated) { if (isCreated) {
this.dialogs.notifyInfo('A new user with the entered email address has been created and assigned as contributor.'); this.dialogs.notifyInfo('A new user with the entered email address has been created and assigned as contributor.');

2
src/Squidex/app/features/settings/pages/patterns/pattern.component.ts

@ -58,7 +58,7 @@ export class PatternComponent implements OnInit {
} else { } else {
this.patternsState.create(value) this.patternsState.create(value)
.subscribe(() => { .subscribe(() => {
this.editForm.submitCompleted({}); this.editForm.submitCompleted({ pattern: '', name: '' });
}, error => { }, error => {
this.editForm.submitFailed(error); this.editForm.submitFailed(error);
}); });

2
src/Squidex/app/features/settings/pages/roles/role.component.ts

@ -85,7 +85,7 @@ export class RoleComponent implements OnChanges {
if (value) { if (value) {
this.editForm.add(value.permission); this.editForm.add(value.permission);
this.addPermissionForm.submitCompleted({}); this.addPermissionForm.submitCompleted({ permission: '' });
this.addPermissionInput.focus(); this.addPermissionInput.focus();
} }
} }

2
src/Squidex/app/features/settings/pages/roles/roles-page.component.ts

@ -67,7 +67,7 @@ export class RolesPageComponent implements OnInit {
if (value) { if (value) {
this.rolesState.add(value) this.rolesState.add(value)
.subscribe(() => { .subscribe(() => {
this.addRoleForm.submitCompleted({}); this.addRoleForm.submitCompleted({ name: '' });
}, error => { }, error => {
this.addRoleForm.submitFailed(error); this.addRoleForm.submitFailed(error);
}); });

22
src/Squidex/app/framework/state.ts

@ -20,7 +20,7 @@ export interface FormState {
error?: string | null; error?: string | null;
} }
export class Form<T extends AbstractControl, V = any> { export class Form<T extends AbstractControl, V> {
private readonly state = new State<FormState>({ submitted: false }); private readonly state = new State<FormState>({ submitted: false });
public submitted = public submitted =
@ -42,12 +42,20 @@ export class Form<T extends AbstractControl, V = any> {
this.form.enable(); this.form.enable();
} }
protected reset(value: V | undefined) { protected setValue(value?: V) {
this.form.reset(value); if (value) {
this.form.reset(this.transformLoad(value));
} else {
this.form.reset();
}
}
protected transformLoad(value: V): any {
return value;
} }
protected setValue(value: V | undefined) { protected transformSubmit(value: any): V {
this.form.reset(value, { emitEvent: true }); return value;
} }
public load(value: V | undefined) { public load(value: V | undefined) {
@ -60,7 +68,7 @@ export class Form<T extends AbstractControl, V = any> {
this.state.next(_ => ({ submitted: true })); this.state.next(_ => ({ submitted: true }));
if (this.form.valid) { if (this.form.valid) {
const value = fullValue(this.form); const value = this.transformSubmit(fullValue(this.form));
this.disable(); this.disable();
@ -76,7 +84,7 @@ export class Form<T extends AbstractControl, V = any> {
this.enable(); this.enable();
if (newValue) { if (newValue) {
this.reset(newValue); this.setValue(newValue);
} else { } else {
this.form.markAsPristine(); this.form.markAsPristine();
} }

2
src/Squidex/app/shared/components/comments.component.ts

@ -69,7 +69,7 @@ export class CommentsComponent extends ResourceOwner implements OnInit {
if (value) { if (value) {
this.state.create(value.text).pipe(onErrorResumeNext()).subscribe(); this.state.create(value.text).pipe(onErrorResumeNext()).subscribe();
this.commentForm.submitCompleted({}); this.commentForm.submitCompleted({ text: '' });
} }
} }

4
src/Squidex/app/shared/services/schemas.service.spec.ts

@ -419,7 +419,7 @@ describe('SchemasService', () => {
const dto = new AddFieldDto('name', 'invariant', createProperties('Number')); const dto = new AddFieldDto('name', 'invariant', createProperties('Number'));
let field: FieldDto<any>; let field: FieldDto;
schemasService.postField('my-app', 'my-schema', dto, undefined, version).subscribe(result => { schemasService.postField('my-app', 'my-schema', dto, undefined, version).subscribe(result => {
field = result.payload; field = result.payload;
@ -466,7 +466,7 @@ describe('SchemasService', () => {
const dto = new AddFieldDto('name', 'invariant', createProperties('Number')); const dto = new AddFieldDto('name', 'invariant', createProperties('Number'));
let field: FieldDto<any>; let field: FieldDto;
schemasService.postField('my-app', 'my-schema', dto, 13, version).subscribe(result => { schemasService.postField('my-app', 'my-schema', dto, 13, version).subscribe(result => {
field = result.payload; field = result.payload;

2
src/Squidex/app/shared/state/apps.forms.ts

@ -16,7 +16,7 @@ import {
const FALLBACK_NAME = 'my-app'; const FALLBACK_NAME = 'my-app';
export class CreateAppForm extends Form<FormGroup> { export class CreateAppForm extends Form<FormGroup, { name: string }> {
public appName = value$(this.form.controls['name']).pipe(map(v => v || FALLBACK_NAME)); public appName = value$(this.form.controls['name']).pipe(map(v => v || FALLBACK_NAME));
constructor(formBuilder: FormBuilder) { constructor(formBuilder: FormBuilder) {

4
src/Squidex/app/shared/state/assets.forms.ts

@ -13,7 +13,7 @@ import { Form, Types } from '@app/framework';
import { AssetDto } from './../services/assets.service'; import { AssetDto } from './../services/assets.service';
export class AnnotateAssetForm extends Form<FormGroup> { export class AnnotateAssetForm extends Form<FormGroup, { fileName?: string, slug?: string, tags?: string[] }> {
constructor(formBuilder: FormBuilder) { constructor(formBuilder: FormBuilder) {
super(formBuilder.group({ super(formBuilder.group({
fileName: ['', fileName: ['',
@ -37,7 +37,7 @@ export class AnnotateAssetForm extends Form<FormGroup> {
public submit(asset?: AssetDto) { public submit(asset?: AssetDto) {
const result = super.submit(); const result = super.submit();
if (asset) { if (asset && result) {
let index = asset.fileName.lastIndexOf('.'); let index = asset.fileName.lastIndexOf('.');
if (index > 0) { if (index > 0) {

6
src/Squidex/app/shared/state/backups.forms.ts

@ -13,18 +13,18 @@ import {
ValidatorsEx ValidatorsEx
} from '@app/framework'; } from '@app/framework';
export class RestoreForm extends Form<FormGroup> { export class RestoreForm extends Form<FormGroup, { name?: string, url: string }> {
public hasNoUrl = hasNoValue$(this.form.controls['url']); public hasNoUrl = hasNoValue$(this.form.controls['url']);
constructor(formBuilder: FormBuilder) { constructor(formBuilder: FormBuilder) {
super(formBuilder.group({ super(formBuilder.group({
name: [null, name: ['',
[ [
Validators.maxLength(40), Validators.maxLength(40),
ValidatorsEx.pattern('[a-z0-9]+(\-[a-z0-9]+)*', 'Name can contain lower case letters (a-z), numbers and dashes (not at the end).') ValidatorsEx.pattern('[a-z0-9]+(\-[a-z0-9]+)*', 'Name can contain lower case letters (a-z), numbers and dashes (not at the end).')
] ]
], ],
url: [null, url: ['',
[ [
Validators.required Validators.required
] ]

4
src/Squidex/app/shared/state/clients.forms.ts

@ -13,7 +13,7 @@ import {
ValidatorsEx ValidatorsEx
} from '@app/framework'; } from '@app/framework';
export class RenameClientForm extends Form<FormGroup> { export class RenameClientForm extends Form<FormGroup, { name: string }> {
constructor(formBuilder: FormBuilder) { constructor(formBuilder: FormBuilder) {
super(formBuilder.group({ super(formBuilder.group({
name: ['', name: ['',
@ -25,7 +25,7 @@ export class RenameClientForm extends Form<FormGroup> {
} }
} }
export class AttachClientForm extends Form<FormGroup> { export class AttachClientForm extends Form<FormGroup, { name: string}> {
public hasNoName = hasNoValue$(this.form.controls['name']); public hasNoName = hasNoValue$(this.form.controls['name']);
constructor(formBuilder: FormBuilder) { constructor(formBuilder: FormBuilder) {

2
src/Squidex/app/shared/state/comments.form.ts

@ -9,7 +9,7 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { Form } from '@app/framework'; import { Form } from '@app/framework';
export class UpsertCommentForm extends Form<FormGroup> { export class UpsertCommentForm extends Form<FormGroup, { text: string }> {
constructor(formBuilder: FormBuilder) { constructor(formBuilder: FormBuilder) {
super(formBuilder.group({ super(formBuilder.group({
text: ['', text: ['',

6
src/Squidex/app/shared/state/contents.forms.ts

@ -35,7 +35,7 @@ import {
TagsFieldPropertiesDto TagsFieldPropertiesDto
} from './../services/schemas.types'; } from './../services/schemas.types';
export class SaveQueryForm extends Form<FormGroup> { export class SaveQueryForm extends Form<FormGroup, any> {
constructor(formBuilder: FormBuilder) { constructor(formBuilder: FormBuilder) {
super(formBuilder.group({ super(formBuilder.group({
name: ['', name: ['',
@ -298,7 +298,7 @@ export class FieldDefaultValue implements FieldPropertiesVisitor<any> {
} }
} }
export class EditContentForm extends Form<FormGroup> { export class EditContentForm extends Form<FormGroup, any> {
constructor( constructor(
private readonly schema: SchemaDetailsDto, private readonly schema: SchemaDetailsDto,
private readonly languages: ImmutableArray<AppLanguageDto> private readonly languages: ImmutableArray<AppLanguageDto>
@ -466,7 +466,7 @@ export class EditContentForm extends Form<FormGroup> {
} }
} }
export class PatchContentForm extends Form<FormGroup> { export class PatchContentForm extends Form<FormGroup, any> {
constructor( constructor(
private readonly schema: SchemaDetailsDto, private readonly schema: SchemaDetailsDto,
private readonly language: AppLanguageDto private readonly language: AppLanguageDto

4
src/Squidex/app/shared/state/contributors.forms.ts

@ -9,7 +9,9 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { Form, hasNoValue$ } from '@app/framework'; import { Form, hasNoValue$ } from '@app/framework';
export class AssignContributorForm extends Form<FormGroup> { import { UserDto } from './../services/users.service';
export class AssignContributorForm extends Form<FormGroup, { user: string | UserDto }> {
public hasNoUser = hasNoValue$(this.form.controls['user']); public hasNoUser = hasNoValue$(this.form.controls['user']);
constructor(formBuilder: FormBuilder) { constructor(formBuilder: FormBuilder) {

6
src/Squidex/app/shared/state/languages.forms.ts

@ -9,7 +9,9 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { Form } from '@app/framework'; import { Form } from '@app/framework';
export class EditLanguageForm extends Form<FormGroup> { import { LanguageDto } from '../services/languages.service';
export class EditLanguageForm extends Form<FormGroup, { isMaster: boolean, isOptional: boolean }> {
constructor(formBuilder: FormBuilder) { constructor(formBuilder: FormBuilder) {
super(formBuilder.group({ super(formBuilder.group({
isMaster: false, isMaster: false,
@ -32,7 +34,7 @@ export class EditLanguageForm extends Form<FormGroup> {
} }
} }
export class AddLanguageForm extends Form<FormGroup> { export class AddLanguageForm extends Form<FormGroup, { language: LanguageDto }> {
constructor(formBuilder: FormBuilder) { constructor(formBuilder: FormBuilder) {
super(formBuilder.group({ super(formBuilder.group({
language: [null, language: [null,

2
src/Squidex/app/shared/state/patterns.forms.ts

@ -9,7 +9,7 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { Form, ValidatorsEx } from '@app/framework'; import { Form, ValidatorsEx } from '@app/framework';
export class EditPatternForm extends Form<FormGroup> { export class EditPatternForm extends Form<FormGroup, { name: string, pattern: string, message?: string }> {
constructor(formBuilder: FormBuilder) { constructor(formBuilder: FormBuilder) {
super(formBuilder.group({ super(formBuilder.group({
name: ['', name: ['',

10
src/Squidex/app/shared/state/roles.forms.ts

@ -13,7 +13,7 @@ import {
hasValue$ hasValue$
} from '@app/framework'; } from '@app/framework';
export class EditPermissionsForm extends Form<FormArray> { export class EditPermissionsForm extends Form<FormArray, string[]> {
constructor() { constructor() {
super(new FormArray([])); super(new FormArray([]));
} }
@ -39,12 +39,12 @@ export class EditPermissionsForm extends Form<FormArray> {
} }
} }
export class AddPermissionForm extends Form<FormGroup> { export class AddPermissionForm extends Form<FormGroup, { permission: string }> {
public hasPermission = hasValue$(this.form.controls['permission']); public hasPermission = hasValue$(this.form.controls['permission']);
constructor(formBuilder: FormBuilder) { constructor(formBuilder: FormBuilder) {
super(formBuilder.group({ super(formBuilder.group({
permission: [null, permission: ['',
[ [
Validators.required Validators.required
] ]
@ -53,12 +53,12 @@ export class AddPermissionForm extends Form<FormGroup> {
} }
} }
export class AddRoleForm extends Form<FormGroup> { export class AddRoleForm extends Form<FormGroup, { name: string }> {
public hasNoName = hasNoValue$(this.form.controls['name']); public hasNoName = hasNoValue$(this.form.controls['name']);
constructor(formBuilder: FormBuilder) { constructor(formBuilder: FormBuilder) {
super(formBuilder.group({ super(formBuilder.group({
name: [null, name: ['',
[ [
Validators.required Validators.required
] ]

60
src/Squidex/app/shared/state/schemas.forms.ts

@ -14,11 +14,13 @@ import {
value$ value$
} from '@app/framework'; } from '@app/framework';
import { AddFieldDto } from '../services/schemas.service';
import { createProperties } from './../services/schemas.types'; import { createProperties } from './../services/schemas.types';
const FALLBACK_NAME = 'my-schema'; const FALLBACK_NAME = 'my-schema';
export class CreateCategoryForm extends Form<FormGroup> { export class CreateCategoryForm extends Form<FormGroup, { name: string }> {
constructor(formBuilder: FormBuilder) { constructor(formBuilder: FormBuilder) {
super(formBuilder.group({ super(formBuilder.group({
name: [''] name: ['']
@ -26,7 +28,7 @@ export class CreateCategoryForm extends Form<FormGroup> {
} }
} }
export class CreateSchemaForm extends Form<FormGroup> { export class CreateSchemaForm extends Form<FormGroup, { name: string, isSingleton?: boolean, import: any }> {
public schemaName = public schemaName =
value$(this.form.controls['name']).pipe(n => n || FALLBACK_NAME); value$(this.form.controls['name']).pipe(n => n || FALLBACK_NAME);
@ -45,7 +47,7 @@ export class CreateSchemaForm extends Form<FormGroup> {
} }
} }
export class AddPreviewUrlForm extends Form<FormGroup> { export class AddPreviewUrlForm extends Form<FormGroup, { name: string, url: string }> {
constructor(formBuilder: FormBuilder) { constructor(formBuilder: FormBuilder) {
super(formBuilder.group({ super(formBuilder.group({
name: ['', name: ['',
@ -62,7 +64,7 @@ export class AddPreviewUrlForm extends Form<FormGroup> {
} }
} }
export class ConfigurePreviewUrlsForm extends Form<FormArray> { export class ConfigurePreviewUrlsForm extends Form<FormArray, { [name: string]: string }> {
constructor( constructor(
private readonly formBuilder: FormBuilder private readonly formBuilder: FormBuilder
) { ) {
@ -89,7 +91,9 @@ export class ConfigurePreviewUrlsForm extends Form<FormArray> {
this.form.removeAt(index); this.form.removeAt(index);
} }
public load(value?: any) { public transformLoad(value: { [name: string]: string }) {
const result: { name: string, url: string }[] = [];
if (Types.isObject(value)) { if (Types.isObject(value)) {
const length = Object.keys(value).length; const length = Object.keys(value).length;
@ -101,38 +105,28 @@ export class ConfigurePreviewUrlsForm extends Form<FormArray> {
this.remove(this.form.controls.length - 1); this.remove(this.form.controls.length - 1);
} }
const array: any[] = [];
for (let key in value) { for (let key in value) {
if (value.hasOwnProperty(key)) { if (value.hasOwnProperty(key)) {
array.push({ name: key, url: value[key] }); result.push({ name: key, url: value[key] });
} }
} }
value = array;
} }
super.load(value); return result;
} }
public submit() { public transformSubmit(value: { name: string, url: string }[]): { [name: string]: string } {
let result = super.submit(); const result: { [name: string]: string } = {};
if (result) { for (let item of value) {
const hash: { [name: string]: string } = {}; result[item.name] = item.url;
for (let item of result) {
hash[item.name] = item.url;
}
result = hash;
} }
return result; return result;
} }
} }
export class EditScriptsForm extends Form<FormGroup> { export class EditScriptsForm extends Form<FormGroup, { query?: string, create?: string, change?: string, delete?: string, update?: string }> {
constructor(formBuilder: FormBuilder) { constructor(formBuilder: FormBuilder) {
super(formBuilder.group({ super(formBuilder.group({
query: '', query: '',
@ -144,7 +138,7 @@ export class EditScriptsForm extends Form<FormGroup> {
} }
} }
export class EditFieldForm extends Form<FormGroup> { export class EditFieldForm extends Form<FormGroup, { label?: string, hints?: string, placeholder?: string, editorUrl?: string, isRequired: boolean, isListField: boolean }> {
constructor(formBuilder: FormBuilder) { constructor(formBuilder: FormBuilder) {
super(formBuilder.group({ super(formBuilder.group({
label: ['', label: ['',
@ -169,7 +163,7 @@ export class EditFieldForm extends Form<FormGroup> {
} }
} }
export class EditSchemaForm extends Form<FormGroup> { export class EditSchemaForm extends Form<FormGroup, { label?: string, hints?: string }> {
constructor(formBuilder: FormBuilder) { constructor(formBuilder: FormBuilder) {
super(formBuilder.group({ super(formBuilder.group({
label: ['', label: ['',
@ -186,7 +180,7 @@ export class EditSchemaForm extends Form<FormGroup> {
} }
} }
export class AddFieldForm extends Form<FormGroup> { export class AddFieldForm extends Form<FormGroup, AddFieldDto> {
constructor(formBuilder: FormBuilder) { constructor(formBuilder: FormBuilder) {
super(formBuilder.group({ super(formBuilder.group({
type: ['String', type: ['String',
@ -205,16 +199,16 @@ export class AddFieldForm extends Form<FormGroup> {
})); }));
} }
public submit() { public transformLoad(value: AddFieldDto) {
const value = super.submit(); const isLocalizable = value.partitioning === 'language';
if (value) { return { name: value.name, isLocalizable, type: value.properties.fieldType };
const properties = createProperties(value.type); }
const partitioning = value.isLocalizable ? 'language' : 'invariant';
return { name: value.name, partitioning, properties }; public transformSubmit(value: any): AddFieldDto {
} const properties = createProperties(value.type);
const partitioning = value.isLocalizable ? 'language' : 'invariant';
return null; return { name: value.name, partitioning, properties };
} }
} }
Loading…
Cancel
Save