From b47deb8ab45e364726460d3bd9ced533b3338bab Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Fri, 26 Apr 2019 10:49:13 +0200 Subject: [PATCH] Temp --- .../event-consumers-page.component.ts | 3 +- .../pages/users/user-page.component.ts | 7 +++- .../pages/users/users-page.component.ts | 3 +- .../services/users.service.spec.ts | 6 +-- .../pages/content/content-field.component.ts | 3 +- .../pages/rules/rule-wizard.component.ts | 3 +- .../pages/schema/field-wizard.component.ts | 5 +-- .../schemas/pages/schema/field.component.ts | 9 ++-- .../forms/field-form-validation.component.ts | 6 +-- .../types/string-validation.component.ts | 6 +-- .../pages/clients/client.component.ts | 21 ++++------ .../pages/clients/clients-page.component.ts | 9 ++-- .../contributors-page.component.ts | 13 +++--- .../pages/languages/language.component.ts | 5 +-- .../pages/patterns/pattern.component.ts | 4 +- .../pages/patterns/patterns-page.component.ts | 4 +- .../settings/pages/roles/role.component.ts | 9 ++-- .../pages/roles/roles-page.component.ts | 10 ++--- src/Squidex/app/framework/state.ts | 16 +++---- .../shared/components/app-form.component.ts | 3 +- src/Squidex/app/shared/internal.ts | 8 ++-- src/Squidex/app/shared/module.ts | 16 +++---- .../shared/services/app-languages.service.ts | 8 ++-- .../shared/services/assets.service.spec.ts | 42 +++++++++++-------- .../app/shared/services/assets.service.ts | 4 +- ...ervice.spec.ts => clients.service.spec.ts} | 42 +++++++++---------- ...-clients.service.ts => clients.service.ts} | 26 ++++++------ ...e.spec.ts => contributors.service.spec.ts} | 30 ++++++------- ...ors.service.ts => contributors.service.ts} | 14 +++---- .../app/shared/services/help.service.spec.ts | 2 +- ...rvice.spec.ts => patterns.service.spec.ts} | 30 ++++++------- ...atterns.service.ts => patterns.service.ts} | 22 +++++----- ....service.spec.ts => roles.service.spec.ts} | 32 +++++++------- ...{app-roles.service.ts => roles.service.ts} | 24 +++++------ .../shared/services/schemas.service.spec.ts | 8 ++-- .../app/shared/services/schemas.service.ts | 12 ++++++ .../app/shared/state/clients.state.spec.ts | 20 ++++----- src/Squidex/app/shared/state/clients.state.ts | 30 ++++++------- .../shared/state/contributors.state.spec.ts | 26 ++++++------ .../app/shared/state/contributors.state.ts | 26 ++++++------ .../app/shared/state/patterns.state.spec.ts | 20 ++++----- .../app/shared/state/patterns.state.ts | 28 ++++++------- .../app/shared/state/roles.state.spec.ts | 20 ++++----- src/Squidex/app/shared/state/roles.state.ts | 30 ++++++------- .../app/shared/state/schemas.state.spec.ts | 12 +++--- src/Squidex/app/shared/state/schemas.state.ts | 11 +++-- 46 files changed, 346 insertions(+), 342 deletions(-) rename src/Squidex/app/shared/services/{app-clients.service.spec.ts => clients.service.spec.ts} (68%) rename src/Squidex/app/shared/services/{app-clients.service.ts => clients.service.ts} (82%) rename src/Squidex/app/shared/services/{app-contributors.service.spec.ts => contributors.service.spec.ts} (71%) rename src/Squidex/app/shared/services/{app-contributors.service.ts => contributors.service.ts} (87%) rename src/Squidex/app/shared/services/{app-patterns.service.spec.ts => patterns.service.spec.ts} (75%) rename src/Squidex/app/shared/services/{app-patterns.service.ts => patterns.service.ts} (81%) rename src/Squidex/app/shared/services/{app-roles.service.spec.ts => roles.service.spec.ts} (77%) rename src/Squidex/app/shared/services/{app-roles.service.ts => roles.service.ts} (81%) diff --git a/src/Squidex/app/features/administration/pages/event-consumers/event-consumers-page.component.ts b/src/Squidex/app/features/administration/pages/event-consumers/event-consumers-page.component.ts index 30b65c600..c23849a99 100644 --- a/src/Squidex/app/features/administration/pages/event-consumers/event-consumers-page.component.ts +++ b/src/Squidex/app/features/administration/pages/event-consumers/event-consumers-page.component.ts @@ -11,8 +11,7 @@ import { onErrorResumeNext, switchMap } from 'rxjs/operators'; import { DialogModel, ResourceOwner } from '@app/shared'; -import { EventConsumerDto } from './../../services/event-consumers.service'; -import { EventConsumersState } from './../../state/event-consumers.state'; +import { EventConsumerDto, EventConsumersState } from '../../declarations'; @Component({ selector: 'sqx-event-consumers-page', diff --git a/src/Squidex/app/features/administration/pages/users/user-page.component.ts b/src/Squidex/app/features/administration/pages/users/user-page.component.ts index e009b6115..e2be65749 100644 --- a/src/Squidex/app/features/administration/pages/users/user-page.component.ts +++ b/src/Squidex/app/features/administration/pages/users/user-page.component.ts @@ -11,8 +11,11 @@ import { ActivatedRoute, Router } from '@angular/router'; import { ResourceOwner } from '@app/shared'; -import { UserDto } from './../../services/users.service'; -import { UserForm, UsersState } from './../../state/users.state'; +import { + UserDto, + UserForm, + UsersState +} from '../../declarations'; @Component({ selector: 'sqx-user-page', diff --git a/src/Squidex/app/features/administration/pages/users/users-page.component.ts b/src/Squidex/app/features/administration/pages/users/users-page.component.ts index 8d8c5c052..a7b6ab87d 100644 --- a/src/Squidex/app/features/administration/pages/users/users-page.component.ts +++ b/src/Squidex/app/features/administration/pages/users/users-page.component.ts @@ -9,8 +9,7 @@ import { Component, OnInit } from '@angular/core'; import { FormControl } from '@angular/forms'; import { onErrorResumeNext } from 'rxjs/operators'; -import { UserDto } from './../../services/users.service'; -import { UsersState } from './../../state/users.state'; +import { UserDto, UsersState } from '../../declarations'; @Component({ selector: 'sqx-users-page', diff --git a/src/Squidex/app/features/administration/services/users.service.spec.ts b/src/Squidex/app/features/administration/services/users.service.spec.ts index 2095c84ef..ee74d079f 100644 --- a/src/Squidex/app/features/administration/services/users.service.spec.ts +++ b/src/Squidex/app/features/administration/services/users.service.spec.ts @@ -11,8 +11,6 @@ import { inject, TestBed } from '@angular/core/testing'; import { ApiUrlConfig } from '@app/framework'; import { - CreateUserDto, - UpdateUserDto, UserDto, UsersDto, UsersService @@ -145,7 +143,7 @@ describe('UsersService', () => { it('should make post request to create user', inject([UsersService, HttpTestingController], (userManagementService: UsersService, httpMock: HttpTestingController) => { - const dto = new CreateUserDto('mail@squidex.io', 'Squidex User', ['Permission1'], 'password'); + const dto = { email: 'mail@squidex.io', displayName: 'Squidex User', permissions: ['Permission1'], password: 'password' }; let user: UserDto; @@ -166,7 +164,7 @@ describe('UsersService', () => { it('should make put request to update user', inject([UsersService, HttpTestingController], (userManagementService: UsersService, httpMock: HttpTestingController) => { - const dto = new UpdateUserDto('mail@squidex.io', 'Squidex User', ['Permission1'], 'password'); + const dto = { email: 'mail@squidex.io', displayName: 'Squidex User', permissions: ['Permission1'], password: 'password' }; userManagementService.putUser('123', dto).subscribe(); diff --git a/src/Squidex/app/features/content/pages/content/content-field.component.ts b/src/Squidex/app/features/content/pages/content/content-field.component.ts index 24fe7fdc2..c949af5de 100644 --- a/src/Squidex/app/features/content/pages/content/content-field.component.ts +++ b/src/Squidex/app/features/content/pages/content/content-field.component.ts @@ -19,7 +19,6 @@ import { LocalStoreService, RootFieldDto, SchemaDto, - TranslateDto, TranslationsService, Types, value$ @@ -158,7 +157,7 @@ export class ContentFieldComponent implements OnChanges { const value = control.value; if (!value) { - const request = new TranslateDto(text, sourceLanguage, targetLanguage); + const request = { text, sourceLanguage, targetLanguage }; this.translations.translate(this.appsState.appName, request) .subscribe(result => { diff --git a/src/Squidex/app/features/rules/pages/rules/rule-wizard.component.ts b/src/Squidex/app/features/rules/pages/rules/rule-wizard.component.ts index 5d493db2b..a6339aa75 100644 --- a/src/Squidex/app/features/rules/pages/rules/rule-wizard.component.ts +++ b/src/Squidex/app/features/rules/pages/rules/rule-wizard.component.ts @@ -9,7 +9,6 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { FormGroup } from '@angular/forms'; import { - CreateRuleDto, Form, ImmutableArray, RuleDto, @@ -118,7 +117,7 @@ export class RuleWizardComponent implements OnInit { } private createRule() { - const requestDto = new CreateRuleDto(this.trigger, this.action); + const requestDto = { trigger: this.trigger, action: this.action }; this.rulesState.create(requestDto) .subscribe(() => { diff --git a/src/Squidex/app/features/schemas/pages/schema/field-wizard.component.ts b/src/Squidex/app/features/schemas/pages/schema/field-wizard.component.ts index d341f4af2..ea4a99529 100644 --- a/src/Squidex/app/features/schemas/pages/schema/field-wizard.component.ts +++ b/src/Squidex/app/features/schemas/pages/schema/field-wizard.component.ts @@ -18,8 +18,7 @@ import { RootFieldDto, SchemaDetailsDto, SchemasState, - Types, - UpdateFieldDto + Types } from '@app/shared'; @Component({ @@ -103,7 +102,7 @@ export class FieldWizardComponent implements OnInit { if (value) { const properties = createProperties(this.field.properties['fieldType'], value); - this.schemasState.updateField(this.schema, this.field as RootFieldDto, new UpdateFieldDto(properties)) + this.schemasState.updateField(this.schema, this.field as RootFieldDto, { properties }) .subscribe(() => { this.editForm.submitCompleted(); diff --git a/src/Squidex/app/features/schemas/pages/schema/field.component.ts b/src/Squidex/app/features/schemas/pages/schema/field.component.ts index f3c843584..2e64fdf05 100644 --- a/src/Squidex/app/features/schemas/pages/schema/field.component.ts +++ b/src/Squidex/app/features/schemas/pages/schema/field.component.ts @@ -10,7 +10,6 @@ import { FormBuilder } from '@angular/forms'; import { onErrorResumeNext } from 'rxjs/operators'; import { - AppPatternDto, createProperties, DialogModel, EditFieldForm, @@ -18,10 +17,10 @@ import { ImmutableArray, ModalModel, NestedFieldDto, + PatternDto, RootFieldDto, SchemaDetailsDto, - SchemasState, - UpdateFieldDto + SchemasState } from '@app/shared'; @Component({ @@ -43,7 +42,7 @@ export class FieldComponent implements OnChanges { public parent: RootFieldDto; @Input() - public patterns: ImmutableArray; + public patterns: ImmutableArray; public dropdown = new ModalModel(); @@ -120,7 +119,7 @@ export class FieldComponent implements OnChanges { if (value) { const properties = createProperties(this.field.properties['fieldType'], value); - this.schemasState.updateField(this.schema, this.field, new UpdateFieldDto(properties)) + this.schemasState.updateField(this.schema, this.field, { properties }) .subscribe(() => { this.editForm.submitCompleted(); }, error => { diff --git a/src/Squidex/app/features/schemas/pages/schema/forms/field-form-validation.component.ts b/src/Squidex/app/features/schemas/pages/schema/forms/field-form-validation.component.ts index 9917a677d..d02c495a5 100644 --- a/src/Squidex/app/features/schemas/pages/schema/forms/field-form-validation.component.ts +++ b/src/Squidex/app/features/schemas/pages/schema/forms/field-form-validation.component.ts @@ -9,9 +9,9 @@ import { Component, Input } from '@angular/core'; import { FormGroup } from '@angular/forms'; import { - AppPatternDto, FieldDto, - ImmutableArray + ImmutableArray, + PatternDto } from '@app/shared'; @Component({ @@ -27,5 +27,5 @@ export class FieldFormValidationComponent { public field: FieldDto; @Input() - public patterns: ImmutableArray; + public patterns: ImmutableArray; } \ No newline at end of file diff --git a/src/Squidex/app/features/schemas/pages/schema/types/string-validation.component.ts b/src/Squidex/app/features/schemas/pages/schema/types/string-validation.component.ts index 77cd4f192..7ecd32f9b 100644 --- a/src/Squidex/app/features/schemas/pages/schema/types/string-validation.component.ts +++ b/src/Squidex/app/features/schemas/pages/schema/types/string-validation.component.ts @@ -10,11 +10,11 @@ import { FormControl, FormGroup } from '@angular/forms'; import { Observable } from 'rxjs'; import { - AppPatternDto, FieldDto, hasNoValue$, ImmutableArray, ModalModel, + PatternDto, ResourceOwner, RootFieldDto, StringFieldPropertiesDto, @@ -37,7 +37,7 @@ export class StringValidationComponent extends ResourceOwner implements OnInit { public properties: StringFieldPropertiesDto; @Input() - public patterns: ImmutableArray; + public patterns: ImmutableArray; public showDefaultValue: Observable; public showPatternMessage: boolean; @@ -93,7 +93,7 @@ export class StringValidationComponent extends ResourceOwner implements OnInit { this.setPatternName(); } - public setPattern(pattern: AppPatternDto) { + public setPattern(pattern: PatternDto) { this.patternName = pattern.name; this.editForm.controls['pattern'].setValue(pattern.pattern); this.editForm.controls['patternMessage'].setValue(pattern.message); diff --git a/src/Squidex/app/features/settings/pages/clients/client.component.ts b/src/Squidex/app/features/settings/pages/clients/client.component.ts index fd8648645..e45c48ac9 100644 --- a/src/Squidex/app/features/settings/pages/clients/client.component.ts +++ b/src/Squidex/app/features/settings/pages/clients/client.component.ts @@ -12,15 +12,14 @@ import { onErrorResumeNext } from 'rxjs/operators'; import { AccessTokenDto, ApiUrlConfig, - AppClientDto, - AppClientsService, - AppRoleDto, AppsState, + ClientDto, + ClientsService, ClientsState, DialogModel, DialogService, RenameClientForm, - UpdateAppClientDto + RoleDto } from '@app/shared'; const ESCAPE_KEY = 27; @@ -62,10 +61,10 @@ function connectLibrary(apiUrl: ApiUrlConfig, app: string, client: { id: string, }) export class ClientComponent implements OnChanges { @Input() - public client: AppClientDto; + public client: ClientDto; @Input() - public clientRoles: AppRoleDto[]; + public clientRoles: RoleDto[]; public isRenaming = false; @@ -82,7 +81,7 @@ export class ClientComponent implements OnChanges { constructor( public readonly appsState: AppsState, private readonly apiUrl: ApiUrlConfig, - private readonly appClientsService: AppClientsService, + private readonly clientsService: ClientsService, private readonly clientsState: ClientsState, private readonly dialogs: DialogService, private readonly formBuilder: FormBuilder @@ -105,7 +104,7 @@ export class ClientComponent implements OnChanges { } public update(role: string) { - this.clientsState.update(this.client, new UpdateAppClientDto(undefined, role)).pipe(onErrorResumeNext()).subscribe(); + this.clientsState.update(this.client, { role }).pipe(onErrorResumeNext()).subscribe(); } public toggleRename() { @@ -122,9 +121,7 @@ export class ClientComponent implements OnChanges { const value = this.renameForm.submit(); if (value) { - const requestDto = new UpdateAppClientDto(value.name); - - this.clientsState.update(this.client, requestDto) + this.clientsState.update(this.client, value) .subscribe(() => { this.renameForm.submitCompleted(); @@ -138,7 +135,7 @@ export class ClientComponent implements OnChanges { public connect() { this.connectDialog.show(); - this.appClientsService.createToken(this.appsState.appName, this.client) + this.clientsService.createToken(this.appsState.appName, this.client) .subscribe(dto => { this.connectToken = dto; }, error => { diff --git a/src/Squidex/app/features/settings/pages/clients/clients-page.component.ts b/src/Squidex/app/features/settings/pages/clients/clients-page.component.ts index 00caae62c..bb73da085 100644 --- a/src/Squidex/app/features/settings/pages/clients/clients-page.component.ts +++ b/src/Squidex/app/features/settings/pages/clients/clients-page.component.ts @@ -10,11 +10,10 @@ import { FormBuilder } from '@angular/forms'; import { onErrorResumeNext } from 'rxjs/operators'; import { - AppClientDto, AppsState, AttachClientForm, + ClientDto, ClientsState, - CreateAppClientDto, RolesState } from '@app/shared'; @@ -48,9 +47,7 @@ export class ClientsPageComponent implements OnInit { const value = this.addClientForm.submit(); if (value) { - const requestDto = new CreateAppClientDto(value.name); - - this.clientsState.attach(requestDto) + this.clientsState.attach(value) .subscribe(() => { this.addClientForm.submitCompleted(); }, error => { @@ -63,7 +60,7 @@ export class ClientsPageComponent implements OnInit { this.addClientForm.submitCompleted(); } - public trackByClient(index: number, item: AppClientDto) { + public trackByClient(index: number, item: ClientDto) { return item.id; } } \ No newline at end of file diff --git a/src/Squidex/app/features/settings/pages/contributors/contributors-page.component.ts b/src/Squidex/app/features/settings/pages/contributors/contributors-page.component.ts index 61d77c7b8..c3807c899 100644 --- a/src/Squidex/app/features/settings/pages/contributors/contributors-page.component.ts +++ b/src/Squidex/app/features/settings/pages/contributors/contributors-page.component.ts @@ -11,11 +11,10 @@ import { Observable } from 'rxjs'; import { onErrorResumeNext, withLatestFrom } from 'rxjs/operators'; import { - AppContributorDto, AppsState, - AssignContributorDto, AssignContributorForm, AutocompleteSource, + ContributorDto, ContributorsState, DialogService, RolesState, @@ -78,12 +77,12 @@ export class ContributorsPageComponent implements OnInit { this.contributorsState.load(true).pipe(onErrorResumeNext()).subscribe(); } - public remove(contributor: AppContributorDto) { + public remove(contributor: ContributorDto) { this.contributorsState.revoke(contributor).pipe(onErrorResumeNext()).subscribe(); } - public changeRole(contributor: AppContributorDto, role: string) { - this.contributorsState.assign(new AssignContributorDto(contributor.contributorId, role)).pipe(onErrorResumeNext()).subscribe(); + public changeRole(contributor: ContributorDto, role: string) { + this.contributorsState.assign({ contributorId: contributor.contributorId, role }).pipe(onErrorResumeNext()).subscribe(); } public assignContributor() { @@ -96,7 +95,7 @@ export class ContributorsPageComponent implements OnInit { user = user.id; } - const requestDto = new AssignContributorDto(user, 'Editor', true); + const requestDto = { contributorId: user, role: 'Editor', invite: true }; this.contributorsState.assign(requestDto) .subscribe(isCreated => { @@ -111,7 +110,7 @@ export class ContributorsPageComponent implements OnInit { } } - public trackByContributor(index: number, contributorInfo: { contributor: AppContributorDto }) { + public trackByContributor(index: number, contributorInfo: { contributor: ContributorDto }) { return contributorInfo.contributor.contributorId; } } diff --git a/src/Squidex/app/features/settings/pages/languages/language.component.ts b/src/Squidex/app/features/settings/pages/languages/language.component.ts index 67da727e0..6d1ed36e1 100644 --- a/src/Squidex/app/features/settings/pages/languages/language.component.ts +++ b/src/Squidex/app/features/settings/pages/languages/language.component.ts @@ -14,8 +14,7 @@ import { EditLanguageForm, fadeAnimation, ImmutableArray, - LanguagesState, - UpdateAppLanguageDto + LanguagesState } from '@app/shared'; @Component({ @@ -64,7 +63,7 @@ export class LanguageComponent implements OnChanges { const value = this.editForm.submit(); if (value) { - const request = new UpdateAppLanguageDto(value.isMaster, value.isOptional, this.fallbackLanguages.map(x => x.iso2Code).values); + const request = { ...value, fallbackLanguages: this.fallbackLanguages.map(x => x.iso2Code).values }; this.languagesState.update(this.language, request) .subscribe(() => { diff --git a/src/Squidex/app/features/settings/pages/patterns/pattern.component.ts b/src/Squidex/app/features/settings/pages/patterns/pattern.component.ts index d37976ef0..8b02c9a52 100644 --- a/src/Squidex/app/features/settings/pages/patterns/pattern.component.ts +++ b/src/Squidex/app/features/settings/pages/patterns/pattern.component.ts @@ -10,8 +10,8 @@ import { FormBuilder } from '@angular/forms'; import { onErrorResumeNext } from 'rxjs/operators'; import { - AppPatternDto, EditPatternForm, + PatternDto, PatternsState } from '@app/shared'; @@ -22,7 +22,7 @@ import { }) export class PatternComponent implements OnInit { @Input() - public pattern: AppPatternDto; + public pattern: PatternDto; public editForm = new EditPatternForm(this.formBuilder); diff --git a/src/Squidex/app/features/settings/pages/patterns/patterns-page.component.ts b/src/Squidex/app/features/settings/pages/patterns/patterns-page.component.ts index 57db136ae..01ff48e92 100644 --- a/src/Squidex/app/features/settings/pages/patterns/patterns-page.component.ts +++ b/src/Squidex/app/features/settings/pages/patterns/patterns-page.component.ts @@ -9,8 +9,8 @@ import { Component, OnInit } from '@angular/core'; import { onErrorResumeNext } from 'rxjs/operators'; import { - AppPatternDto, AppsState, + PatternDto, PatternsState } from '@app/shared'; @@ -34,7 +34,7 @@ export class PatternsPageComponent implements OnInit { this.patternsState.load(true).pipe(onErrorResumeNext()).subscribe(); } - public trackByPattern(index: number, pattern: AppPatternDto) { + public trackByPattern(index: number, pattern: PatternDto) { return pattern.id; } } \ No newline at end of file diff --git a/src/Squidex/app/features/settings/pages/roles/role.component.ts b/src/Squidex/app/features/settings/pages/roles/role.component.ts index 5c892da21..a0980abfc 100644 --- a/src/Squidex/app/features/settings/pages/roles/role.component.ts +++ b/src/Squidex/app/features/settings/pages/roles/role.component.ts @@ -11,13 +11,12 @@ import { onErrorResumeNext } from 'rxjs/operators'; import { AddPermissionForm, - AppRoleDto, AutocompleteComponent, AutocompleteSource, EditPermissionsForm, fadeAnimation, - RolesState, - UpdateAppRoleDto + RoleDto, + RolesState } from '@app/shared'; const DEFAULT_ROLES = [ @@ -37,7 +36,7 @@ const DEFAULT_ROLES = [ }) export class RoleComponent implements OnChanges { @Input() - public role: AppRoleDto; + public role: RoleDto; @Input() public allPermissions: AutocompleteSource; @@ -95,7 +94,7 @@ export class RoleComponent implements OnChanges { const value = this.editForm.submit(); if (value) { - const request = new UpdateAppRoleDto(value); + const request = { permissions: value }; this.rolesState.update(this.role, request) .subscribe(() => { diff --git a/src/Squidex/app/features/settings/pages/roles/roles-page.component.ts b/src/Squidex/app/features/settings/pages/roles/roles-page.component.ts index 0722c02ba..ddf0607e8 100644 --- a/src/Squidex/app/features/settings/pages/roles/roles-page.component.ts +++ b/src/Squidex/app/features/settings/pages/roles/roles-page.component.ts @@ -12,17 +12,17 @@ import { onErrorResumeNext } from 'rxjs/operators'; import { AddRoleForm, - AppRoleDto, - AppRolesService, AppsState, AutocompleteSource, + RoleDto, + RolesService, RolesState } from '@app/shared'; class PermissionsAutocomplete implements AutocompleteSource { private permissions: string[] = []; - constructor(appsState: AppsState, rolesService: AppRolesService) { + constructor(appsState: AppsState, rolesService: RolesService) { rolesService.getPermissions(appsState.appName).subscribe(x => this.permissions = x); } @@ -43,7 +43,7 @@ export class RolesPageComponent implements OnInit { constructor( public readonly appsState: AppsState, - public readonly rolesService: AppRolesService, + public readonly rolesService: RolesService, public readonly rolesState: RolesState, private readonly formBuilder: FormBuilder ) { @@ -74,7 +74,7 @@ export class RolesPageComponent implements OnInit { } } - public trackByRole(index: number, role: AppRoleDto) { + public trackByRole(index: number, role: RoleDto) { return role.name; } } diff --git a/src/Squidex/app/framework/state.ts b/src/Squidex/app/framework/state.ts index ae0ddfcb1..4a529406d 100644 --- a/src/Squidex/app/framework/state.ts +++ b/src/Squidex/app/framework/state.ts @@ -20,7 +20,7 @@ export interface FormState { error?: string | null; } -export class Form { +export class Form { private readonly state = new State({ submitted: false }); public submitted = @@ -42,21 +42,21 @@ export class Form { this.form.enable(); } - protected reset(value: any) { + protected reset(value: V | undefined) { this.form.reset(value); } - protected setValue(value: any) { + protected setValue(value: V | undefined) { this.form.reset(value, { emitEvent: true }); } - public load(value: any) { + public load(value: V | undefined) { this.state.next(_ => ({ submitted: false, error: null })); this.setValue(value); } - public submit(): any | null { + public submit(): V | null { this.state.next(_ => ({ submitted: true })); if (this.form.valid) { @@ -70,7 +70,7 @@ export class Form { } } - public submitCompleted(newValue?: any) { + public submitCompleted(newValue?: V) { this.state.next(_ => ({ submitted: false, error: null })); this.enable(); @@ -106,8 +106,8 @@ export class Model { return this.clone(value, validOnly); } - protected clone(update: ((v: any) => T) | Partial, validOnly = false): T { - let values: Partial; + protected clone(update: ((v: any) => V) | Partial, validOnly = false): V { + let values: Partial; if (Types.isFunction(update)) { values = update(this); } else { diff --git a/src/Squidex/app/shared/components/app-form.component.ts b/src/Squidex/app/shared/components/app-form.component.ts index 1b812a6c6..561db49cc 100644 --- a/src/Squidex/app/shared/components/app-form.component.ts +++ b/src/Squidex/app/shared/components/app-form.component.ts @@ -11,7 +11,6 @@ import { FormBuilder } from '@angular/forms'; import { ApiUrlConfig, AppsState, - CreateAppDto, CreateAppForm } from '@app/shared/internal'; @@ -45,7 +44,7 @@ export class AppFormComponent { const value = this.createForm.submit(); if (value) { - const request = new CreateAppDto(value.name, this.template); + const request = { ...value, template: this.template }; this.appsStore.create(request) .subscribe(() => { diff --git a/src/Squidex/app/shared/internal.ts b/src/Squidex/app/shared/internal.ts index 4508030d9..21a2aab51 100644 --- a/src/Squidex/app/shared/internal.ts +++ b/src/Squidex/app/shared/internal.ts @@ -19,14 +19,12 @@ export * from './guards/unset-content.guard'; export * from './interceptors/auth.interceptor'; -export * from './services/app-contributors.service'; -export * from './services/app-clients.service'; export * from './services/app-languages.service'; -export * from './services/app-patterns.service'; -export * from './services/app-roles.service'; export * from './services/apps.service'; export * from './services/assets.service'; export * from './services/auth.service'; +export * from './services/clients.service'; +export * from './services/contributors.service'; export * from './services/backups.service'; export * from './services/comments.service'; export * from './services/contents.service'; @@ -35,7 +33,9 @@ export * from './services/help.service'; export * from './services/history.service'; export * from './services/languages.service'; export * from './services/news.service'; +export * from './services/patterns.service'; export * from './services/plans.service'; +export * from './services/roles.service'; export * from './services/rules.service'; export * from './services/schemas.service'; export * from './services/schemas.types'; diff --git a/src/Squidex/app/shared/module.ts b/src/Squidex/app/shared/module.ts index 51d794428..044ad2167 100644 --- a/src/Squidex/app/shared/module.ts +++ b/src/Squidex/app/shared/module.ts @@ -13,13 +13,9 @@ import { DndModule } from 'ng2-dnd'; import { SqxFrameworkModule } from '@app/framework'; import { - AppClientsService, - AppContributorsService, AppFormComponent, AppLanguagesService, AppMustExistGuard, - AppPatternsService, - AppRolesService, AppsService, AppsState, AssetComponent, @@ -35,6 +31,7 @@ import { AuthService, BackupsService, BackupsState, + ClientsService, ClientsState, CommentComponent, CommentsComponent, @@ -42,6 +39,7 @@ import { ContentMustExistGuard, ContentsService, ContentsState, + ContributorsService, ContributorsState, FileIconPipe, GeolocationEditorComponent, @@ -62,11 +60,13 @@ import { MustBeAuthenticatedGuard, MustBeNotAuthenticatedGuard, NewsService, + PatternsService, PatternsState, PermissionDirective, PlansService, PlansState, RichEditorComponent, + RolesService, RolesState, RuleEventsState, RulesService, @@ -173,12 +173,12 @@ export class SqxSharedModule { return { ngModule: SqxSharedModule, providers: [ - AppClientsService, - AppContributorsService, + ClientsService, + ContributorsService, AppLanguagesService, AppMustExistGuard, - AppPatternsService, - AppRolesService, + PatternsService, + RolesService, AppsService, AppsState, AssetsState, diff --git a/src/Squidex/app/shared/services/app-languages.service.ts b/src/Squidex/app/shared/services/app-languages.service.ts index 8cd281d7c..5a83f059e 100644 --- a/src/Squidex/app/shared/services/app-languages.service.ts +++ b/src/Squidex/app/shared/services/app-languages.service.ts @@ -73,8 +73,8 @@ export class AppLanguagesService { return new AppLanguageDto( item.iso2Code, item.englishName, - item.isMaster === true, - item.isOptional === true, + item.isMaster, + item.isOptional, item.fallback || []); }); @@ -93,8 +93,8 @@ export class AppLanguagesService { const language = new AppLanguageDto( body.iso2Code, body.englishName, - body.isMaster === true, - body.isOptional === true, + body.isMaster, + body.isOptional, body.fallback || []); return new Versioned(response.version, language); diff --git a/src/Squidex/app/shared/services/assets.service.spec.ts b/src/Squidex/app/shared/services/assets.service.spec.ts index 16709cc4f..6c32b85d4 100644 --- a/src/Squidex/app/shared/services/assets.service.spec.ts +++ b/src/Squidex/app/shared/services/assets.service.spec.ts @@ -35,7 +35,7 @@ describe('AssetDto', () => { const asset_1 = new AssetDto('1', creator, creator, creation, creation, 'Name.png', 'Hash', 'png', 1, 1, 'image/png', false, false, 1, 1, 'name.png', [], 'url', version); const asset_2 = asset_1.annnotate(update, modifier, newVersion, modified); - expect(asset_2.fileName).toEqual('NewName.png'); + expect(asset_2.fileName).toEqual(update.fileName); expect(asset_2.tags).toEqual([]); expect(asset_2.slug).toEqual(asset_1.slug); expect(asset_2.lastModified).toEqual(modified); @@ -44,18 +44,26 @@ describe('AssetDto', () => { }); it('should update file properties when uploading', () => { - const update = new AssetReplacedDto('Hash New', 2, 2, 'image/jpeg', true, 2, 2); + const update = { + fileHash: 'Hash New', + fileSize: 1024, + fileVersion: 12, + mimeType: 'image/png', + isImage: true, + pixelWidth: 1024, + pixelHeight: 2048 + }; const asset_1 = new AssetDto('1', creator, creator, creation, creation, 'Name.png', 'Hash', 'png', 1, 1, 'image/png', false, false, 1, 1, 'name.png', [], 'url', version); const asset_2 = asset_1.update(update, modifier, newVersion, modified); - expect(asset_2.fileHash).toEqual('Hash New'); - expect(asset_2.fileSize).toEqual(2); - expect(asset_2.fileVersion).toEqual(2); - expect(asset_2.mimeType).toEqual('image/jpeg'); + expect(asset_2.fileHash).toEqual(update.fileHash); + expect(asset_2.fileSize).toEqual(update.fileSize); + expect(asset_2.fileVersion).toEqual(update.fileVersion); + expect(asset_2.mimeType).toEqual(update.mimeType); expect(asset_2.isImage).toBeTruthy(); - expect(asset_2.pixelWidth).toEqual(2); - expect(asset_2.pixelHeight).toEqual(2); + expect(asset_2.pixelWidth).toEqual(update.pixelWidth); + expect(asset_2.pixelHeight).toEqual(update.pixelHeight); expect(asset_2.lastModified).toEqual(modified); expect(asset_2.lastModifiedBy).toEqual(modifier); expect(asset_2.version).toEqual(newVersion); @@ -407,15 +415,15 @@ describe('AssetsService', () => { pixelHeight: 2048 }); - expect(asset!).toEqual( - new AssetReplacedDto( - 'Hash New', - 1024, - 12, - 'image/png', - true, - 1024, - 2048)); + expect(asset!).toEqual({ + fileHash: 'Hash New', + fileSize: 1024, + fileVersion: 12, + mimeType: 'image/png', + isImage: true, + pixelWidth: 1024, + pixelHeight: 2048 + }); })); it('should return proper error when replace failed with 413', diff --git a/src/Squidex/app/shared/services/assets.service.ts b/src/Squidex/app/shared/services/assets.service.ts index eb8b5d3ff..d5ac43806 100644 --- a/src/Squidex/app/shared/services/assets.service.ts +++ b/src/Squidex/app/shared/services/assets.service.ts @@ -56,7 +56,7 @@ export class AssetDto extends Model { } public update(update: AssetReplacedDto, user: string, version: Version, now?: DateTime): AssetDto { - return this.clone({ + return this.with({ ...update, lastModified: now || DateTime.now(), lastModifiedBy: user, @@ -65,7 +65,7 @@ export class AssetDto extends Model { } public annnotate(update: AnnotateAssetDto, user: string, version: Version, now?: DateTime): AssetDto { - return this.clone({ + return this.with({ ...update, lastModified: now || DateTime.now(), lastModifiedBy: user, diff --git a/src/Squidex/app/shared/services/app-clients.service.spec.ts b/src/Squidex/app/shared/services/clients.service.spec.ts similarity index 68% rename from src/Squidex/app/shared/services/app-clients.service.spec.ts rename to src/Squidex/app/shared/services/clients.service.spec.ts index c1179f696..14ced0b32 100644 --- a/src/Squidex/app/shared/services/app-clients.service.spec.ts +++ b/src/Squidex/app/shared/services/clients.service.spec.ts @@ -12,13 +12,13 @@ import { AccessTokenDto, AnalyticsService, ApiUrlConfig, - AppClientDto, - AppClientsDto, - AppClientsService, + ClientDto, + ClientsDto, + ClientsService, Version } from './../'; -describe('AppClientsService', () => { +describe('ClientsService', () => { const version = new Version('1'); beforeEach(() => { @@ -27,7 +27,7 @@ describe('AppClientsService', () => { HttpClientTestingModule ], providers: [ - AppClientsService, + ClientsService, { provide: ApiUrlConfig, useValue: new ApiUrlConfig('http://service/p/') }, { provide: AnalyticsService, useValue: new AnalyticsService() } ] @@ -39,11 +39,11 @@ describe('AppClientsService', () => { })); it('should make get request to get app clients', - inject([AppClientsService, HttpTestingController], (appClientsService: AppClientsService, httpMock: HttpTestingController) => { + inject([ClientsService, HttpTestingController], (clientsService: ClientsService, httpMock: HttpTestingController) => { - let clients: AppClientsDto; + let clients: ClientsDto; - appClientsService.getClients('my-app').subscribe(result => { + clientsService.getClients('my-app').subscribe(result => { clients = result; }); @@ -72,20 +72,20 @@ describe('AppClientsService', () => { }); expect(clients!).toEqual( - new AppClientsDto([ - new AppClientDto('client1', 'Client 1', 'secret1', 'Editor'), - new AppClientDto('client2', 'Client 2', 'secret2', 'Developer') + new ClientsDto([ + new ClientDto('client1', 'Client 1', 'secret1', 'Editor'), + new ClientDto('client2', 'Client 2', 'secret2', 'Developer') ], new Version('2'))); })); it('should make post request to create client', - inject([AppClientsService, HttpTestingController], (appClientsService: AppClientsService, httpMock: HttpTestingController) => { + inject([ClientsService, HttpTestingController], (clientsService: ClientsService, httpMock: HttpTestingController) => { const dto = { id: 'client1' }; - let client: AppClientDto; + let client: ClientDto; - appClientsService.postClient('my-app', dto, version).subscribe(result => { + clientsService.postClient('my-app', dto, version).subscribe(result => { client = result.payload; }); @@ -96,15 +96,15 @@ describe('AppClientsService', () => { req.flush({ id: 'client1', name: 'Client 1', secret: 'secret1', role: 'Developer' }); - expect(client!).toEqual(new AppClientDto('client1', 'Client 1', 'secret1', 'Developer')); + expect(client!).toEqual(new ClientDto('client1', 'Client 1', 'secret1', 'Developer')); })); it('should make put request to rename client', - inject([AppClientsService, HttpTestingController], (appClientsService: AppClientsService, httpMock: HttpTestingController) => { + inject([ClientsService, HttpTestingController], (clientsService: ClientsService, httpMock: HttpTestingController) => { const dto = { name: 'New Name' }; - appClientsService.putClient('my-app', 'client1', dto, version).subscribe(); + clientsService.putClient('my-app', 'client1', dto, version).subscribe(); const req = httpMock.expectOne('http://service/p/api/apps/my-app/clients/client1'); @@ -115,9 +115,9 @@ describe('AppClientsService', () => { })); it('should make delete request to remove client', - inject([AppClientsService, HttpTestingController], (appClientsService: AppClientsService, httpMock: HttpTestingController) => { + inject([ClientsService, HttpTestingController], (clientsService: ClientsService, httpMock: HttpTestingController) => { - appClientsService.deleteClient('my-app', 'client1', version).subscribe(); + clientsService.deleteClient('my-app', 'client1', version).subscribe(); const req = httpMock.expectOne('http://service/p/api/apps/my-app/clients/client1'); @@ -128,11 +128,11 @@ describe('AppClientsService', () => { })); it('should make form request to create token', - inject([AppClientsService, HttpTestingController], (appClientsService: AppClientsService, httpMock: HttpTestingController) => { + inject([ClientsService, HttpTestingController], (clientsService: ClientsService, httpMock: HttpTestingController) => { let accessTokenDto: AccessTokenDto; - appClientsService.createToken('my-app', new AppClientDto('myClientId', 'myClient', 'mySecret', 'Editor')).subscribe(result => { + clientsService.createToken('my-app', new ClientDto('myClientId', 'myClient', 'mySecret', 'Editor')).subscribe(result => { accessTokenDto = result; }); diff --git a/src/Squidex/app/shared/services/app-clients.service.ts b/src/Squidex/app/shared/services/clients.service.ts similarity index 82% rename from src/Squidex/app/shared/services/app-clients.service.ts rename to src/Squidex/app/shared/services/clients.service.ts index 36507531d..396e3182e 100644 --- a/src/Squidex/app/shared/services/app-clients.service.ts +++ b/src/Squidex/app/shared/services/clients.service.ts @@ -20,16 +20,16 @@ import { Versioned } from '@app/framework'; -export class AppClientsDto extends Model { +export class ClientsDto extends Model { constructor( - public readonly clients: AppClientDto[], + public readonly clients: ClientDto[], public readonly version: Version ) { super(); } } -export class AppClientDto extends Model { +export class ClientDto extends Model { constructor( public readonly id: string, public readonly name: string, @@ -48,17 +48,17 @@ export class AccessTokenDto { } } -export interface CreateAppClientDto { +export interface CreateClientDto { readonly id: string; } -export interface UpdateAppClientDto { +export interface UpdateClientDto { readonly name?: string; readonly role?: string; } @Injectable() -export class AppClientsService { +export class ClientsService { constructor( private readonly http: HttpClient, private readonly apiUrl: ApiUrlConfig, @@ -66,7 +66,7 @@ export class AppClientsService { ) { } - public getClients(appName: string): Observable { + public getClients(appName: string): Observable { const url = this.apiUrl.buildUrl(`api/apps/${appName}/clients`); return HTTP.getVersioned(this.http, url).pipe( @@ -76,26 +76,26 @@ export class AppClientsService { const items: any[] = body; const clients = items.map(item => { - return new AppClientDto( + return new ClientDto( item.id, item.name || body.id, item.secret, item.role); }); - return new AppClientsDto(clients, response.version); + return new ClientsDto(clients, response.version); }), pretifyError('Failed to load clients. Please reload.')); } - public postClient(appName: string, dto: CreateAppClientDto, version: Version): Observable> { + public postClient(appName: string, dto: CreateClientDto, version: Version): Observable> { const url = this.apiUrl.buildUrl(`api/apps/${appName}/clients`); return HTTP.postVersioned(this.http, url, dto, version).pipe( map(response => { const body = response.payload.body; - const client = new AppClientDto( + const client = new ClientDto( body.id, body.name || body.id, body.secret, @@ -109,7 +109,7 @@ export class AppClientsService { pretifyError('Failed to add client. Please reload.')); } - public putClient(appName: string, id: string, dto: UpdateAppClientDto, version: Version): Observable> { + public putClient(appName: string, id: string, dto: UpdateClientDto, version: Version): Observable> { const url = this.apiUrl.buildUrl(`api/apps/${appName}/clients/${id}`); return HTTP.putVersioned(this.http, url, dto, version).pipe( @@ -129,7 +129,7 @@ export class AppClientsService { pretifyError('Failed to revoke client. Please reload.')); } - public createToken(appName: string, client: AppClientDto): Observable { + public createToken(appName: string, client: ClientDto): Observable { const options = { headers: new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded', 'NoAuth': 'true' diff --git a/src/Squidex/app/shared/services/app-contributors.service.spec.ts b/src/Squidex/app/shared/services/contributors.service.spec.ts similarity index 71% rename from src/Squidex/app/shared/services/app-contributors.service.spec.ts rename to src/Squidex/app/shared/services/contributors.service.spec.ts index 084240dfe..502e753a5 100644 --- a/src/Squidex/app/shared/services/app-contributors.service.spec.ts +++ b/src/Squidex/app/shared/services/contributors.service.spec.ts @@ -11,14 +11,14 @@ import { inject, TestBed } from '@angular/core/testing'; import { AnalyticsService, ApiUrlConfig, - AppContributorDto, - AppContributorsDto, - AppContributorsService, ContributorAssignedDto, + ContributorDto, + ContributorsDto, + ContributorsService, Version } from './../'; -describe('AppContributorsService', () => { +describe('ContributorsService', () => { const version = new Version('1'); beforeEach(() => { @@ -27,7 +27,7 @@ describe('AppContributorsService', () => { HttpClientTestingModule ], providers: [ - AppContributorsService, + ContributorsService, { provide: ApiUrlConfig, useValue: new ApiUrlConfig('http://service/p/') }, { provide: AnalyticsService, useValue: new AnalyticsService() } ] @@ -39,11 +39,11 @@ describe('AppContributorsService', () => { })); it('should make get request to get app contributors', - inject([AppContributorsService, HttpTestingController], (appContributorsService: AppContributorsService, httpMock: HttpTestingController) => { + inject([ContributorsService, HttpTestingController], (contributorsService: ContributorsService, httpMock: HttpTestingController) => { - let contributors: AppContributorsDto; + let contributors: ContributorsDto; - appContributorsService.getContributors('my-app').subscribe(result => { + contributorsService.getContributors('my-app').subscribe(result => { contributors = result; }); @@ -71,20 +71,20 @@ describe('AppContributorsService', () => { }); expect(contributors!).toEqual( - new AppContributorsDto([ - new AppContributorDto('123', 'Owner'), - new AppContributorDto('456', 'Owner') + new ContributorsDto([ + new ContributorDto('123', 'Owner'), + new ContributorDto('456', 'Owner') ], 100, new Version('2'))); })); it('should make post request to assign contributor', - inject([AppContributorsService, HttpTestingController], (appContributorsService: AppContributorsService, httpMock: HttpTestingController) => { + inject([ContributorsService, HttpTestingController], (contributorsService: ContributorsService, httpMock: HttpTestingController) => { const dto = { contributorId: '123', role: 'Owner' }; let contributorAssignedDto: ContributorAssignedDto; - appContributorsService.postContributor('my-app', dto, version).subscribe(result => { + contributorsService.postContributor('my-app', dto, version).subscribe(result => { contributorAssignedDto = result.payload; }); @@ -99,9 +99,9 @@ describe('AppContributorsService', () => { })); it('should make delete request to remove contributor', - inject([AppContributorsService, HttpTestingController], (appContributorsService: AppContributorsService, httpMock: HttpTestingController) => { + inject([ContributorsService, HttpTestingController], (contributorsService: ContributorsService, httpMock: HttpTestingController) => { - appContributorsService.deleteContributor('my-app', '123', version).subscribe(); + contributorsService.deleteContributor('my-app', '123', version).subscribe(); const req = httpMock.expectOne('http://service/p/api/apps/my-app/contributors/123'); diff --git a/src/Squidex/app/shared/services/app-contributors.service.ts b/src/Squidex/app/shared/services/contributors.service.ts similarity index 87% rename from src/Squidex/app/shared/services/app-contributors.service.ts rename to src/Squidex/app/shared/services/contributors.service.ts index ddf3edd6c..94c9b0f22 100644 --- a/src/Squidex/app/shared/services/app-contributors.service.ts +++ b/src/Squidex/app/shared/services/contributors.service.ts @@ -20,9 +20,9 @@ import { Versioned } from '@app/framework'; -export class AppContributorsDto extends Model { +export class ContributorsDto extends Model { constructor( - public readonly contributors: AppContributorDto[], + public readonly contributors: ContributorDto[], public readonly maxContributors: number, public readonly version: Version ) { @@ -30,7 +30,7 @@ export class AppContributorsDto extends Model { } } -export class AppContributorDto extends Model { +export class ContributorDto extends Model { constructor( public readonly contributorId: string, public readonly role: string @@ -51,7 +51,7 @@ export interface AssignContributorDto { } @Injectable() -export class AppContributorsService { +export class ContributorsService { constructor( private readonly http: HttpClient, private readonly apiUrl: ApiUrlConfig, @@ -59,7 +59,7 @@ export class AppContributorsService { ) { } - public getContributors(appName: string): Observable { + public getContributors(appName: string): Observable { const url = this.apiUrl.buildUrl(`api/apps/${appName}/contributors`); return HTTP.getVersioned(this.http, url).pipe( @@ -68,9 +68,9 @@ export class AppContributorsService { const items: any[] = body.contributors; - return new AppContributorsDto( + return new ContributorsDto( items.map(item => { - return new AppContributorDto( + return new ContributorDto( item.contributorId, item.role); }), diff --git a/src/Squidex/app/shared/services/help.service.spec.ts b/src/Squidex/app/shared/services/help.service.spec.ts index b3cc4552a..29891a4a3 100644 --- a/src/Squidex/app/shared/services/help.service.spec.ts +++ b/src/Squidex/app/shared/services/help.service.spec.ts @@ -10,7 +10,7 @@ import { inject, TestBed } from '@angular/core/testing'; import { HelpService } from './../'; -describe('AppClientsService', () => { +describe('ClientsService', () => { beforeEach(() => { TestBed.configureTestingModule({ imports: [ diff --git a/src/Squidex/app/shared/services/app-patterns.service.spec.ts b/src/Squidex/app/shared/services/patterns.service.spec.ts similarity index 75% rename from src/Squidex/app/shared/services/app-patterns.service.spec.ts rename to src/Squidex/app/shared/services/patterns.service.spec.ts index 43b1b8e95..e98ba43a2 100644 --- a/src/Squidex/app/shared/services/app-patterns.service.spec.ts +++ b/src/Squidex/app/shared/services/patterns.service.spec.ts @@ -11,13 +11,13 @@ import { inject, TestBed } from '@angular/core/testing'; import { AnalyticsService, ApiUrlConfig, - AppPatternDto, - AppPatternsDto, - AppPatternsService, + PatternDto, + PatternsDto, + PatternsService, Version } from './../'; -describe('AppPatternsService', () => { +describe('PatternsService', () => { const version = new Version('1'); beforeEach(() => { @@ -26,7 +26,7 @@ describe('AppPatternsService', () => { HttpClientTestingModule ], providers: [ - AppPatternsService, + PatternsService, { provide: ApiUrlConfig, useValue: new ApiUrlConfig('http://service/p/') }, { provide: AnalyticsService, useValue: new AnalyticsService() } ] @@ -38,9 +38,9 @@ describe('AppPatternsService', () => { })); it('should make get request to get patterns', - inject([AppPatternsService, HttpTestingController], (patternService: AppPatternsService, httpMock: HttpTestingController) => { + inject([PatternsService, HttpTestingController], (patternService: PatternsService, httpMock: HttpTestingController) => { - let patterns: AppPatternsDto; + let patterns: PatternsDto; patternService.getPatterns('my-app').subscribe(result => { patterns = result; @@ -70,18 +70,18 @@ describe('AppPatternsService', () => { }); expect(patterns!).toEqual( - new AppPatternsDto([ - new AppPatternDto('1', 'Number', '[0-9]', 'Message1'), - new AppPatternDto('2', 'Numbers', '[0-9]*', 'Message2') + new PatternsDto([ + new PatternDto('1', 'Number', '[0-9]', 'Message1'), + new PatternDto('2', 'Numbers', '[0-9]*', 'Message2') ], new Version('2'))); })); it('should make post request to add pattern', - inject([AppPatternsService, HttpTestingController], (patternService: AppPatternsService, httpMock: HttpTestingController) => { + inject([PatternsService, HttpTestingController], (patternService: PatternsService, httpMock: HttpTestingController) => { const dto = { name: 'Number', pattern: '[0-9]' }; - let pattern: AppPatternDto; + let pattern: PatternDto; patternService.postPattern('my-app', dto, version).subscribe(result => { pattern = result.payload; @@ -99,11 +99,11 @@ describe('AppPatternsService', () => { message: 'Message1' }); - expect(pattern!).toEqual(new AppPatternDto('1', 'Number', '[0-9]', 'Message1')); + expect(pattern!).toEqual(new PatternDto('1', 'Number', '[0-9]', 'Message1')); })); it('should make put request to update pattern', - inject([AppPatternsService, HttpTestingController], (patternService: AppPatternsService, httpMock: HttpTestingController) => { + inject([PatternsService, HttpTestingController], (patternService: PatternsService, httpMock: HttpTestingController) => { const dto = { name: 'Number', pattern: '[0-9]' }; @@ -118,7 +118,7 @@ describe('AppPatternsService', () => { })); it('should make delete request to remove pattern', - inject([AppPatternsService, HttpTestingController], (patternService: AppPatternsService, httpMock: HttpTestingController) => { + inject([PatternsService, HttpTestingController], (patternService: PatternsService, httpMock: HttpTestingController) => { patternService.deletePattern('my-app', '1', version).subscribe(); diff --git a/src/Squidex/app/shared/services/app-patterns.service.ts b/src/Squidex/app/shared/services/patterns.service.ts similarity index 81% rename from src/Squidex/app/shared/services/app-patterns.service.ts rename to src/Squidex/app/shared/services/patterns.service.ts index d2ce8969c..209c93ede 100644 --- a/src/Squidex/app/shared/services/app-patterns.service.ts +++ b/src/Squidex/app/shared/services/patterns.service.ts @@ -20,16 +20,16 @@ import { Versioned } from '@app/framework'; -export class AppPatternsDto extends Model { +export class PatternsDto extends Model { constructor( - public readonly patterns: AppPatternDto[], + public readonly patterns: PatternDto[], public readonly version: Version ) { super(); } } -export class AppPatternDto extends Model { +export class PatternDto extends Model { constructor( public readonly id: string, public readonly name: string, @@ -40,14 +40,14 @@ export class AppPatternDto extends Model { } } -export interface EditAppPatternDto { +export interface EditPatternDto { readonly name: string; readonly pattern: string; readonly message?: string; } @Injectable() -export class AppPatternsService { +export class PatternsService { constructor( private readonly http: HttpClient, private readonly apiUrl: ApiUrlConfig, @@ -55,7 +55,7 @@ export class AppPatternsService { ) { } - public getPatterns(appName: string): Observable { + public getPatterns(appName: string): Observable { const url = this.apiUrl.buildUrl(`api/apps/${appName}/patterns`); return HTTP.getVersioned(this.http, url).pipe( @@ -64,9 +64,9 @@ export class AppPatternsService { const items: any[] = body; - return new AppPatternsDto( + return new PatternsDto( items.map(item => { - return new AppPatternDto( + return new PatternDto( item.patternId, item.name, item.pattern, @@ -77,14 +77,14 @@ export class AppPatternsService { pretifyError('Failed to add pattern. Please reload.')); } - public postPattern(appName: string, dto: EditAppPatternDto, version: Version): Observable> { + public postPattern(appName: string, dto: EditPatternDto, version: Version): Observable> { const url = this.apiUrl.buildUrl(`api/apps/${appName}/patterns`); return HTTP.postVersioned(this.http, url, dto, version).pipe( map(response => { const body = response.payload.body; - const pattern = new AppPatternDto( + const pattern = new PatternDto( body.patternId, body.name, body.pattern, @@ -98,7 +98,7 @@ export class AppPatternsService { pretifyError('Failed to add pattern. Please reload.')); } - public putPattern(appName: string, id: string, dto: EditAppPatternDto, version: Version): Observable> { + public putPattern(appName: string, id: string, dto: EditPatternDto, version: Version): Observable> { const url = this.apiUrl.buildUrl(`api/apps/${appName}/patterns/${id}`); return HTTP.putVersioned(this.http, url, dto, version).pipe( diff --git a/src/Squidex/app/shared/services/app-roles.service.spec.ts b/src/Squidex/app/shared/services/roles.service.spec.ts similarity index 77% rename from src/Squidex/app/shared/services/app-roles.service.spec.ts rename to src/Squidex/app/shared/services/roles.service.spec.ts index 35979140b..cf64c4d0b 100644 --- a/src/Squidex/app/shared/services/app-roles.service.spec.ts +++ b/src/Squidex/app/shared/services/roles.service.spec.ts @@ -11,13 +11,13 @@ import { inject, TestBed } from '@angular/core/testing'; import { AnalyticsService, ApiUrlConfig, - AppRoleDto, - AppRolesDto, - AppRolesService, + RoleDto, + RolesDto, + RolesService, Version } from './../'; -describe('AppRolesService', () => { +describe('RolesService', () => { const version = new Version('1'); beforeEach(() => { @@ -26,7 +26,7 @@ describe('AppRolesService', () => { HttpClientTestingModule ], providers: [ - AppRolesService, + RolesService, { provide: ApiUrlConfig, useValue: new ApiUrlConfig('http://service/p/') }, { provide: AnalyticsService, useValue: new AnalyticsService() } ] @@ -38,7 +38,7 @@ describe('AppRolesService', () => { })); it('should make get request to get all permissions', - inject([AppRolesService, HttpTestingController], (roleService: AppRolesService, httpMock: HttpTestingController) => { + inject([RolesService, HttpTestingController], (roleService: RolesService, httpMock: HttpTestingController) => { let permissions: string[]; @@ -57,9 +57,9 @@ describe('AppRolesService', () => { })); it('should make get request to get roles', - inject([AppRolesService, HttpTestingController], (roleService: AppRolesService, httpMock: HttpTestingController) => { + inject([RolesService, HttpTestingController], (roleService: RolesService, httpMock: HttpTestingController) => { - let roles: AppRolesDto; + let roles: RolesDto; roleService.getRoles('my-app').subscribe(result => { roles = result; @@ -89,19 +89,19 @@ describe('AppRolesService', () => { }); expect(roles!).toEqual( - new AppRolesDto([ - new AppRoleDto('Role1', 3, 5, ['P1']), - new AppRoleDto('Role2', 7, 9, ['P2']) + new RolesDto([ + new RoleDto('Role1', 3, 5, ['P1']), + new RoleDto('Role2', 7, 9, ['P2']) ], new Version('2'))); })); it('should make post request to add role', - inject([AppRolesService, HttpTestingController], (roleService: AppRolesService, httpMock: HttpTestingController) => { + inject([RolesService, HttpTestingController], (roleService: RolesService, httpMock: HttpTestingController) => { const dto = { name: 'Role3' }; - let role: AppRoleDto; + let role: RoleDto; roleService.postRole('my-app', dto, version).subscribe(result => { role = result.payload; @@ -114,11 +114,11 @@ describe('AppRolesService', () => { req.flush({}); - expect(role!).toEqual(new AppRoleDto('Role3', 0, 0, [])); + expect(role!).toEqual(new RoleDto('Role3', 0, 0, [])); })); it('should make put request to update role', - inject([AppRolesService, HttpTestingController], (roleService: AppRolesService, httpMock: HttpTestingController) => { + inject([RolesService, HttpTestingController], (roleService: RolesService, httpMock: HttpTestingController) => { const dto = { permissions: ['P4', 'P5'] }; @@ -133,7 +133,7 @@ describe('AppRolesService', () => { })); it('should make delete request to remove role', - inject([AppRolesService, HttpTestingController], (roleService: AppRolesService, httpMock: HttpTestingController) => { + inject([RolesService, HttpTestingController], (roleService: RolesService, httpMock: HttpTestingController) => { roleService.deleteRole('my-app', 'role1', version).subscribe(); diff --git a/src/Squidex/app/shared/services/app-roles.service.ts b/src/Squidex/app/shared/services/roles.service.ts similarity index 81% rename from src/Squidex/app/shared/services/app-roles.service.ts rename to src/Squidex/app/shared/services/roles.service.ts index 008fd47fd..e45ce027c 100644 --- a/src/Squidex/app/shared/services/app-roles.service.ts +++ b/src/Squidex/app/shared/services/roles.service.ts @@ -20,16 +20,16 @@ import { Versioned } from '@app/framework'; -export class AppRolesDto extends Model { +export class RolesDto extends Model { constructor( - public readonly roles: AppRoleDto[], + public readonly roles: RoleDto[], public readonly version: Version ) { super(); } } -export class AppRoleDto extends Model { +export class RoleDto extends Model { constructor( public readonly name: string, public readonly numClients: number, @@ -40,16 +40,16 @@ export class AppRoleDto extends Model { } } -export interface CreateAppRoleDto { +export interface CreateRoleDto { readonly name: string; } -export interface UpdateAppRoleDto { +export interface UpdateRoleDto { readonly permissions: string[]; } @Injectable() -export class AppRolesService { +export class RolesService { constructor( private readonly http: HttpClient, private readonly apiUrl: ApiUrlConfig, @@ -57,7 +57,7 @@ export class AppRolesService { ) { } - public getRoles(appName: string): Observable { + public getRoles(appName: string): Observable { const url = this.apiUrl.buildUrl(`api/apps/${appName}/roles`); return HTTP.getVersioned(this.http, url).pipe( @@ -67,24 +67,24 @@ export class AppRolesService { const items: any[] = body.roles; const roles = items.map(item => { - return new AppRoleDto( + return new RoleDto( item.name, item.numClients, item.numContributors, item.permissions); }); - return new AppRolesDto(roles, response.version); + return new RolesDto(roles, response.version); }), pretifyError('Failed to load roles. Please reload.')); } - public postRole(appName: string, dto: CreateAppRoleDto, version: Version): Observable> { + public postRole(appName: string, dto: CreateRoleDto, version: Version): Observable> { const url = this.apiUrl.buildUrl(`api/apps/${appName}/roles`); return HTTP.postVersioned(this.http, url, dto, version).pipe( map(response => { - const role = new AppRoleDto(dto.name, 0, 0, []); + const role = new RoleDto(dto.name, 0, 0, []); return new Versioned(response.version, role); }), @@ -94,7 +94,7 @@ export class AppRolesService { pretifyError('Failed to add role. Please reload.')); } - public putRole(appName: string, name: string, dto: UpdateAppRoleDto, version: Version): Observable> { + public putRole(appName: string, name: string, dto: UpdateRoleDto, version: Version): Observable> { const url = this.apiUrl.buildUrl(`api/apps/${appName}/roles/${name}`); return HTTP.putVersioned(this.http, url, dto, version).pipe( diff --git a/src/Squidex/app/shared/services/schemas.service.spec.ts b/src/Squidex/app/shared/services/schemas.service.spec.ts index d6ea001bd..6bfd583e4 100644 --- a/src/Squidex/app/shared/services/schemas.service.spec.ts +++ b/src/Squidex/app/shared/services/schemas.service.spec.ts @@ -48,7 +48,9 @@ describe('SchemasService', () => { })); it('should throw if creating invalid property type', () => { - expect(() => createProperties('invalid')).toThrow('Invalid properties type'); + const type: any = 'invalid'; + + expect(() => createProperties(type)).toThrow('Invalid properties type'); }); it('should make get request to get schemas', @@ -417,7 +419,7 @@ describe('SchemasService', () => { const dto = new AddFieldDto('name', 'invariant', createProperties('Number')); - let field: FieldDto; + let field: FieldDto; schemasService.postField('my-app', 'my-schema', dto, undefined, version).subscribe(result => { field = result.payload; @@ -464,7 +466,7 @@ describe('SchemasService', () => { const dto = new AddFieldDto('name', 'invariant', createProperties('Number')); - let field: FieldDto; + let field: FieldDto; schemasService.postField('my-app', 'my-schema', dto, 13, version).subscribe(result => { field = result.payload; diff --git a/src/Squidex/app/shared/services/schemas.service.ts b/src/Squidex/app/shared/services/schemas.service.ts index e9248d2eb..863f9b95f 100644 --- a/src/Squidex/app/shared/services/schemas.service.ts +++ b/src/Squidex/app/shared/services/schemas.service.ts @@ -84,6 +84,10 @@ export class SchemaDetailsDto extends SchemaDto { this.listFieldsEditable = fields.filter(x => x.isInlineEditable); } } + + public with(value: Partial): SchemaDetailsDto { + return this.clone(value); + } } export class FieldDto extends Model { @@ -137,6 +141,10 @@ export class RootFieldDto extends FieldDto { ) { super(fieldId, name, properties, isLocked, isHidden, isDisabled); } + + public with(value: Partial): RootFieldDto { + return this.clone(value); + } } export class NestedFieldDto extends FieldDto { @@ -148,6 +156,10 @@ export class NestedFieldDto extends FieldDto { ) { super(fieldId, name, properties, isLocked, isHidden, isDisabled); } + + public with(value: Partial): NestedFieldDto { + return this.clone(value); + } } export class SchemaPropertiesDto { diff --git a/src/Squidex/app/shared/state/clients.state.spec.ts b/src/Squidex/app/shared/state/clients.state.spec.ts index f11706196..6462f20b7 100644 --- a/src/Squidex/app/shared/state/clients.state.spec.ts +++ b/src/Squidex/app/shared/state/clients.state.spec.ts @@ -9,10 +9,10 @@ import { of } from 'rxjs'; import { IMock, It, Mock, Times } from 'typemoq'; import { - AppClientDto, - AppClientsDto, - AppClientsService, AppsState, + ClientDto, + ClientsDto, + ClientsService, ClientsState, DialogService, Version, @@ -25,13 +25,13 @@ describe('ClientsState', () => { const newVersion = new Version('2'); const oldClients = [ - new AppClientDto('id1', 'name1', 'secret1'), - new AppClientDto('id2', 'name2', 'secret2') + new ClientDto('id1', 'name1', 'secret1'), + new ClientDto('id2', 'name2', 'secret2') ]; let dialogs: IMock; let appsState: IMock; - let clientsService: IMock; + let clientsService: IMock; let clientsState: ClientsState; beforeEach(() => { @@ -42,10 +42,10 @@ describe('ClientsState', () => { appsState.setup(x => x.appName) .returns(() => app); - clientsService = Mock.ofType(); + clientsService = Mock.ofType(); clientsService.setup(x => x.getClients(app)) - .returns(() => of(new AppClientsDto(oldClients, version))); + .returns(() => of(new ClientsDto(oldClients, version))); clientsState = new ClientsState(clientsService.object, appsState.object, dialogs.object); clientsState.load().subscribe(); @@ -68,12 +68,12 @@ describe('ClientsState', () => { }); it('should add client to snapshot when created', () => { - const newClient = new AppClientDto('id3', 'name3', 'secret3'); + const newClient = new ClientDto('id3', 'name3', 'secret3'); const request = { id: 'id3' }; clientsService.setup(x => x.postClient(app, request, version)) - .returns(() => of(new Versioned(newVersion, newClient))); + .returns(() => of(new Versioned(newVersion, newClient))); clientsState.attach(request).subscribe(); diff --git a/src/Squidex/app/shared/state/clients.state.ts b/src/Squidex/app/shared/state/clients.state.ts index bc3ef18b5..5f3098169 100644 --- a/src/Squidex/app/shared/state/clients.state.ts +++ b/src/Squidex/app/shared/state/clients.state.ts @@ -20,15 +20,15 @@ import { import { AppsState } from './apps.state'; import { - AppClientDto, - AppClientsService, - CreateAppClientDto, - UpdateAppClientDto -} from './../services/app-clients.service'; + ClientDto, + ClientsService, + CreateClientDto, + UpdateClientDto +} from './../services/clients.service'; interface Snapshot { // The current clients. - clients: ImmutableArray; + clients: ImmutableArray; // The app version. version: Version; @@ -48,7 +48,7 @@ export class ClientsState extends State { distinctUntilChanged()); constructor( - private readonly appClientsService: AppClientsService, + private readonly clientsService: ClientsService, private readonly appsState: AppsState, private readonly dialogs: DialogService ) { @@ -60,7 +60,7 @@ export class ClientsState extends State { this.resetState(); } - return this.appClientsService.getClients(this.appName).pipe( + return this.clientsService.getClients(this.appName).pipe( tap(dtos => { if (isReload) { this.dialogs.notifyInfo('Clients reloaded.'); @@ -75,8 +75,8 @@ export class ClientsState extends State { notify(this.dialogs)); } - public attach(request: CreateAppClientDto): Observable { - return this.appClientsService.postClient(this.appName, request, this.version).pipe( + public attach(request: CreateClientDto): Observable { + return this.clientsService.postClient(this.appName, request, this.version).pipe( tap(dto => { this.next(s => { const clients = s.clients.push(dto.payload); @@ -87,8 +87,8 @@ export class ClientsState extends State { notify(this.dialogs)); } - public revoke(client: AppClientDto): Observable { - return this.appClientsService.deleteClient(this.appName, client.id, this.version).pipe( + public revoke(client: ClientDto): Observable { + return this.clientsService.deleteClient(this.appName, client.id, this.version).pipe( tap(dto => { this.next(s => { const clients = s.clients.filter(c => c.id !== client.id); @@ -99,8 +99,8 @@ export class ClientsState extends State { notify(this.dialogs)); } - public update(client: AppClientDto, request: UpdateAppClientDto): Observable { - return this.appClientsService.putClient(this.appName, client.id, request, this.version).pipe( + public update(client: ClientDto, request: UpdateClientDto): Observable { + return this.clientsService.putClient(this.appName, client.id, request, this.version).pipe( tap(dto => { this.next(s => { const clients = s.clients.replaceBy('id', update(client, request)); @@ -120,5 +120,5 @@ export class ClientsState extends State { } } -const update = (client: AppClientDto, request: UpdateAppClientDto) => +const update = (client: ClientDto, request: UpdateClientDto) => client.with({ name: request.name || client.name, role: request.role || client.role }); \ No newline at end of file diff --git a/src/Squidex/app/shared/state/contributors.state.spec.ts b/src/Squidex/app/shared/state/contributors.state.spec.ts index 0c2893e95..b98051959 100644 --- a/src/Squidex/app/shared/state/contributors.state.spec.ts +++ b/src/Squidex/app/shared/state/contributors.state.spec.ts @@ -9,12 +9,12 @@ import { of } from 'rxjs'; import { IMock, It, Mock, Times } from 'typemoq'; import { - AppContributorDto, - AppContributorsDto, - AppContributorsService, AppsState, AuthService, ContributorAssignedDto, + ContributorDto, + ContributorsDto, + ContributorsService, ContributorsState, DialogService, Version, @@ -27,14 +27,14 @@ describe('ContributorsState', () => { const newVersion = new Version('2'); const oldContributors = [ - new AppContributorDto('id1', 'Developer'), - new AppContributorDto('id2', 'Developer') + new ContributorDto('id1', 'Developer'), + new ContributorDto('id2', 'Developer') ]; let dialogs: IMock; let appsState: IMock; let authService: IMock; - let contributorsService: IMock; + let contributorsService: IMock; let contributorsState: ContributorsState; beforeEach(() => { @@ -50,10 +50,10 @@ describe('ContributorsState', () => { appsState.setup(x => x.appName) .returns(() => app); - contributorsService = Mock.ofType(); + contributorsService = Mock.ofType(); contributorsService.setup(x => x.getContributors(app)) - .returns(() => of(new AppContributorsDto(oldContributors, 3, version))); + .returns(() => of(new ContributorsDto(oldContributors, 3, version))); contributorsState = new ContributorsState(contributorsService.object, appsState.object, authService.object, dialogs.object); contributorsState.load().subscribe(); @@ -81,12 +81,12 @@ describe('ContributorsState', () => { }); it('should add contributor to snapshot when assigned', () => { - const newContributor = new AppContributorDto('id3', 'Developer'); + const newContributor = new ContributorDto('id3', 'Developer'); const request = { contributorId: 'mail2stehle@gmail.com', role: 'Developer' }; contributorsService.setup(x => x.postContributor(app, request, version)) - .returns(() => of(new Versioned(newVersion, new ContributorAssignedDto('id3', true)))); + .returns(() => of(new Versioned(newVersion, { contributorId: '123', isCreated: true }))); contributorsState.assign(request).subscribe(); @@ -101,12 +101,12 @@ describe('ContributorsState', () => { }); it('should update contributor in snapshot when assigned and already added', () => { - const newContributor = new AppContributorDto('id2', 'Owner'); + const newContributor = new ContributorDto('id2', 'Owner'); - const request = new AssignContributorDto('mail2stehle@gmail.com', 'Owner'); + const request = { ...newContributor }; contributorsService.setup(x => x.postContributor(app, request, version)) - .returns(() => of(new Versioned(newVersion, new ContributorAssignedDto('id2', true)))); + .returns(() => of(new Versioned(newVersion, { contributorId: '123', isCreated: true }))); contributorsState.assign(request).subscribe(); diff --git a/src/Squidex/app/shared/state/contributors.state.ts b/src/Squidex/app/shared/state/contributors.state.ts index 58034970b..4f8dbfff9 100644 --- a/src/Squidex/app/shared/state/contributors.state.ts +++ b/src/Squidex/app/shared/state/contributors.state.ts @@ -20,17 +20,17 @@ import { } from '@app/framework'; import { - AppContributorDto, - AppContributorsService, - AssignContributorDto -} from './../services/app-contributors.service'; + AssignContributorDto, + ContributorDto, + ContributorsService +} from './../services/contributors.service'; import { AuthService } from './../services/auth.service'; import { AppsState } from './apps.state'; interface SnapshotContributor { // The contributor. - contributor: AppContributorDto; + contributor: ContributorDto; // Indicates if the contributor is the ucrrent user. isCurrentUser: boolean; @@ -72,7 +72,7 @@ export class ContributorsState extends State { distinctUntilChanged()); constructor( - private readonly appContributorsService: AppContributorsService, + private readonly contributorsService: ContributorsService, private readonly appsState: AppsState, private readonly authState: AuthService, private readonly dialogs: DialogService @@ -85,7 +85,7 @@ export class ContributorsState extends State { this.resetState(); } - return this.appContributorsService.getContributors(this.appName).pipe( + return this.contributorsService.getContributors(this.appName).pipe( tap(dtos => { if (isReload) { this.dialogs.notifyInfo('Contributors reloaded.'); @@ -98,8 +98,8 @@ export class ContributorsState extends State { notify(this.dialogs)); } - public revoke(contributor: AppContributorDto): Observable { - return this.appContributorsService.deleteContributor(this.appName, contributor.contributorId, this.version).pipe( + public revoke(contributor: ContributorDto): Observable { + return this.contributorsService.deleteContributor(this.appName, contributor.contributorId, this.version).pipe( tap(dto => { const contributors = this.snapshot.contributors.filter(x => x.contributor.contributorId !== contributor.contributorId); @@ -108,8 +108,8 @@ export class ContributorsState extends State { notify(this.dialogs)); } - public assign(request: AssignContributorDto): Observable { - return this.appContributorsService.postContributor(this.appName, request, this.version).pipe( + public assign(request: AssignContributorDto): Observable { + return this.contributorsService.postContributor(this.appName, request, this.version).pipe( map(dto => { const contributors = this.updateContributors(dto.payload.contributorId, request.role, dto.version); @@ -128,7 +128,7 @@ export class ContributorsState extends State { } private updateContributors(id: string, role: string, version: Version) { - const contributor = new AppContributorDto(id, role); + const contributor = new ContributorDto(id, role); const contributors = this.snapshot.contributors; if (contributors.find(x => x.contributor.contributorId === id)) { @@ -161,7 +161,7 @@ export class ContributorsState extends State { return this.snapshot.version; } - private createContributor(contributor: AppContributorDto, current?: SnapshotContributor): SnapshotContributor { + private createContributor(contributor: ContributorDto, current?: SnapshotContributor): SnapshotContributor { if (!contributor) { return null!; } else if (current && current.contributor === contributor) { diff --git a/src/Squidex/app/shared/state/patterns.state.spec.ts b/src/Squidex/app/shared/state/patterns.state.spec.ts index 583bd6ec8..60d6d5653 100644 --- a/src/Squidex/app/shared/state/patterns.state.spec.ts +++ b/src/Squidex/app/shared/state/patterns.state.spec.ts @@ -9,11 +9,11 @@ import { of } from 'rxjs'; import { IMock, It, Mock, Times } from 'typemoq'; import { - AppPatternDto, - AppPatternsDto, - AppPatternsService, AppsState, DialogService, + PatternDto, + PatternsDto, + PatternsService, PatternsState, Version, Versioned @@ -25,13 +25,13 @@ describe('PatternsState', () => { const newVersion = new Version('2'); const oldPatterns = [ - new AppPatternDto('id1', 'name1', 'pattern1', ''), - new AppPatternDto('id2', 'name2', 'pattern2', '') + new PatternDto('id1', 'name1', 'pattern1', ''), + new PatternDto('id2', 'name2', 'pattern2', '') ]; let dialogs: IMock; let appsState: IMock; - let patternsService: IMock; + let patternsService: IMock; let patternsState: PatternsState; beforeEach(() => { @@ -42,10 +42,10 @@ describe('PatternsState', () => { appsState.setup(x => x.appName) .returns(() => app); - patternsService = Mock.ofType(); + patternsService = Mock.ofType(); patternsService.setup(x => x.getPatterns(app)) - .returns(() => of(new AppPatternsDto(oldPatterns, version))); + .returns(() => of(new PatternsDto(oldPatterns, version))); patternsState = new PatternsState(patternsService.object, appsState.object, dialogs.object); patternsState.load().subscribe(); @@ -67,12 +67,12 @@ describe('PatternsState', () => { }); it('should add pattern to snapshot when created', () => { - const newPattern = new AppPatternDto('id3', 'name3', 'pattern3', ''); + const newPattern = new PatternDto('id3', 'name3', 'pattern3', ''); const request = { ...newPattern }; patternsService.setup(x => x.postPattern(app, request, version)) - .returns(() => of(new Versioned(newVersion, newPattern))); + .returns(() => of(new Versioned(newVersion, newPattern))); patternsState.create(request).subscribe(); diff --git a/src/Squidex/app/shared/state/patterns.state.ts b/src/Squidex/app/shared/state/patterns.state.ts index 7673b50b8..4ae94204a 100644 --- a/src/Squidex/app/shared/state/patterns.state.ts +++ b/src/Squidex/app/shared/state/patterns.state.ts @@ -20,14 +20,14 @@ import { import { AppsState } from './apps.state'; import { - AppPatternDto, - AppPatternsService, - EditAppPatternDto -} from './../services/app-patterns.service'; + EditPatternDto, + PatternDto, + PatternsService +} from './../services/patterns.service'; interface Snapshot { // The current patterns. - patterns: ImmutableArray; + patterns: ImmutableArray; // The app version. version: Version; @@ -47,7 +47,7 @@ export class PatternsState extends State { distinctUntilChanged()); constructor( - private readonly appPatternsService: AppPatternsService, + private readonly patternsService: PatternsService, private readonly appsState: AppsState, private readonly dialogs: DialogService ) { @@ -59,7 +59,7 @@ export class PatternsState extends State { this.resetState(); } - return this.appPatternsService.getPatterns(this.appName).pipe( + return this.patternsService.getPatterns(this.appName).pipe( tap(dtos => { if (isReload) { this.dialogs.notifyInfo('Patterns reloaded.'); @@ -74,8 +74,8 @@ export class PatternsState extends State { notify(this.dialogs)); } - public create(request: EditAppPatternDto): Observable { - return this.appPatternsService.postPattern(this.appName, request, this.version).pipe( + public create(request: EditPatternDto): Observable { + return this.patternsService.postPattern(this.appName, request, this.version).pipe( tap(dto => { this.next(s => { const patterns = s.patterns.push(dto.payload).sortByStringAsc(x => x.name); @@ -86,8 +86,8 @@ export class PatternsState extends State { notify(this.dialogs)); } - public update(pattern: AppPatternDto, request: EditAppPatternDto): Observable { - return this.appPatternsService.putPattern(this.appName, pattern.id, request, this.version).pipe( + public update(pattern: PatternDto, request: EditPatternDto): Observable { + return this.patternsService.putPattern(this.appName, pattern.id, request, this.version).pipe( tap(dto => { this.next(s => { const patterns = s.patterns.replaceBy('id', update(pattern, request)).sortByStringAsc(x => x.name); @@ -98,8 +98,8 @@ export class PatternsState extends State { notify(this.dialogs)); } - public delete(pattern: AppPatternDto): Observable { - return this.appPatternsService.deletePattern(this.appName, pattern.id, this.version).pipe( + public delete(pattern: PatternDto): Observable { + return this.patternsService.deletePattern(this.appName, pattern.id, this.version).pipe( tap(dto => { this.next(s => { const patterns = s.patterns.filter(c => c.id !== pattern.id); @@ -119,5 +119,5 @@ export class PatternsState extends State { } } -const update = (pattern: AppPatternDto, request: EditAppPatternDto) => +const update = (pattern: PatternDto, request: EditPatternDto) => pattern.with(request); \ No newline at end of file diff --git a/src/Squidex/app/shared/state/roles.state.spec.ts b/src/Squidex/app/shared/state/roles.state.spec.ts index eb8c5f59b..69391e2dc 100644 --- a/src/Squidex/app/shared/state/roles.state.spec.ts +++ b/src/Squidex/app/shared/state/roles.state.spec.ts @@ -9,11 +9,11 @@ import { of } from 'rxjs'; import { IMock, It, Mock, Times } from 'typemoq'; import { - AppRoleDto, - AppRolesDto, - AppRolesService, AppsState, DialogService, + RoleDto, + RolesDto, + RolesService, RolesState, Version, Versioned @@ -25,13 +25,13 @@ describe('RolesState', () => { const newVersion = new Version('2'); const oldRoles = [ - new AppRoleDto('Role1', 3, 5, ['P1']), - new AppRoleDto('Role2', 7, 9, ['P2']) + new RoleDto('Role1', 3, 5, ['P1']), + new RoleDto('Role2', 7, 9, ['P2']) ]; let dialogs: IMock; let appsState: IMock; - let rolesService: IMock; + let rolesService: IMock; let rolesState: RolesState; beforeEach(() => { @@ -42,10 +42,10 @@ describe('RolesState', () => { appsState.setup(x => x.appName) .returns(() => app); - rolesService = Mock.ofType(); + rolesService = Mock.ofType(); rolesService.setup(x => x.getRoles(app)) - .returns(() => of(new AppRolesDto(oldRoles, version))); + .returns(() => of(new RolesDto(oldRoles, version))); rolesState = new RolesState(rolesService.object, appsState.object, dialogs.object); rolesState.load().subscribe(); @@ -68,12 +68,12 @@ describe('RolesState', () => { }); it('should add role to snapshot when added', () => { - const newRole = new AppRoleDto('Role3', 0, 0, ['P3']); + const newRole = new RoleDto('Role3', 0, 0, ['P3']); const request = { name: newRole.name }; rolesService.setup(x => x.postRole(app, request, version)) - .returns(() => of(new Versioned(newVersion, newRole))); + .returns(() => of(new Versioned(newVersion, newRole))); rolesState.add(request).subscribe(); diff --git a/src/Squidex/app/shared/state/roles.state.ts b/src/Squidex/app/shared/state/roles.state.ts index b2f6b631b..276a5b505 100644 --- a/src/Squidex/app/shared/state/roles.state.ts +++ b/src/Squidex/app/shared/state/roles.state.ts @@ -20,15 +20,15 @@ import { import { AppsState } from './apps.state'; import { - AppRoleDto, - AppRolesService, - CreateAppRoleDto, - UpdateAppRoleDto -} from './../services/app-roles.service'; + CreateRoleDto, + RoleDto, + RolesService, + UpdateRoleDto +} from './../services/roles.service'; interface Snapshot { // The current roles. - roles: ImmutableArray; + roles: ImmutableArray; // The app version. version: Version; @@ -48,7 +48,7 @@ export class RolesState extends State { distinctUntilChanged()); constructor( - private readonly appRolesService: AppRolesService, + private readonly rolesService: RolesService, private readonly appsState: AppsState, private readonly dialogs: DialogService ) { @@ -60,7 +60,7 @@ export class RolesState extends State { this.resetState(); } - return this.appRolesService.getRoles(this.appName).pipe( + return this.rolesService.getRoles(this.appName).pipe( tap(dtos => { if (isReload) { this.dialogs.notifyInfo('Roles reloaded.'); @@ -75,8 +75,8 @@ export class RolesState extends State { notify(this.dialogs)); } - public add(request: CreateAppRoleDto): Observable { - return this.appRolesService.postRole(this.appName, request, this.version).pipe( + public add(request: CreateRoleDto): Observable { + return this.rolesService.postRole(this.appName, request, this.version).pipe( tap(dto => { this.next(s => { const roles = s.roles.push(dto.payload).sortByStringAsc(x => x.name); @@ -87,8 +87,8 @@ export class RolesState extends State { notify(this.dialogs)); } - public delete(role: AppRoleDto): Observable { - return this.appRolesService.deleteRole(this.appName, role.name, this.version).pipe( + public delete(role: RoleDto): Observable { + return this.rolesService.deleteRole(this.appName, role.name, this.version).pipe( tap(dto => { this.next(s => { const roles = s.roles.filter(c => c.name !== role.name); @@ -99,8 +99,8 @@ export class RolesState extends State { notify(this.dialogs)); } - public update(role: AppRoleDto, request: UpdateAppRoleDto): Observable { - return this.appRolesService.putRole(this.appName, role.name, request, this.version).pipe( + public update(role: RoleDto, request: UpdateRoleDto): Observable { + return this.rolesService.putRole(this.appName, role.name, request, this.version).pipe( tap(dto => { this.next(s => { const roles = s.roles.replaceBy('name', update(role, request)); @@ -120,5 +120,5 @@ export class RolesState extends State { } } -const update = (role: AppRoleDto, request: UpdateAppRoleDto) => +const update = (role: RoleDto, request: UpdateRoleDto) => role.with({ permissions: request.permissions }); \ No newline at end of file diff --git a/src/Squidex/app/shared/state/schemas.state.spec.ts b/src/Squidex/app/shared/state/schemas.state.spec.ts index 09cf0b43f..2624f51b8 100644 --- a/src/Squidex/app/shared/state/schemas.state.spec.ts +++ b/src/Squidex/app/shared/state/schemas.state.spec.ts @@ -23,9 +23,7 @@ import { SchemaDetailsDto, SchemaDto, SchemasService, - UpdateFieldDto, UpdateSchemaCategoryDto, - UpdateSchemaDto, Version, Versioned } from './../'; @@ -248,7 +246,7 @@ describe('SchemasState', () => { }); it('should update properties and update user info when updated', () => { - const request = new UpdateSchemaDto('name2_label', 'name2_hints'); + const request = { label: 'name2_label', hints: 'name2_hints' }; schemasService.setup(x => x.putSchema(app, schema.name, It.isAny(), version)) .returns(() => of(new Versioned(newVersion, {}))); @@ -257,8 +255,8 @@ describe('SchemasState', () => { const schema_1 = schemasState.snapshot.schemas.at(1); - expect(schema_1.properties.label).toEqual('name2_label'); - expect(schema_1.properties.hints).toEqual('name2_hints'); + expect(schema_1.properties.label).toEqual(request.label); + expect(schema_1.properties.hints).toEqual(request.hints); expectToBeModified(schema_1); }); @@ -395,7 +393,7 @@ describe('SchemasState', () => { }); it('should update field properties and update user info when field updated', () => { - const request = new UpdateFieldDto(createProperties('String')); + const request = { properties: createProperties('String') }; schemasService.setup(x => x.putField(app, schema.name, field1.fieldId, request, undefined, version)) .returns(() => of(new Versioned(newVersion, {}))); @@ -409,7 +407,7 @@ describe('SchemasState', () => { }); it('should update field properties and update user info when nested field updated', () => { - const request = new UpdateFieldDto(createProperties('String')); + const request = { properties: createProperties('String') }; schemasService.setup(x => x.putField(app, schema.name, nested1.fieldId, request, 2, version)) .returns(() => of(new Versioned(newVersion, {}))); diff --git a/src/Squidex/app/shared/state/schemas.state.ts b/src/Squidex/app/shared/state/schemas.state.ts index 900401b2c..34784c01a 100644 --- a/src/Squidex/app/shared/state/schemas.state.ts +++ b/src/Squidex/app/shared/state/schemas.state.ts @@ -33,7 +33,6 @@ import { SchemaPropertiesDto, SchemasService, UpdateFieldDto, - UpdateSchemaCategoryDto, UpdateSchemaDto } from './../services/schemas.service'; @@ -190,7 +189,7 @@ export class SchemasState extends State { } public changeCategory(schema: SchemaDto, name: string, now?: DateTime): Observable { - return this.schemasService.putCategory(this.appName, schema.name, new UpdateSchemaCategoryDto(name), schema.version).pipe( + return this.schemasService.putCategory(this.appName, schema.name, { name }, schema.version).pipe( tap(dto => { this.replaceSchema(changeCategory(schema, name, this.user, dto.version, now)); }), @@ -474,8 +473,8 @@ const setDisabled = (field: T, isDisabled: boolean) => const update = (field: T, properties: FieldPropertiesDto) => field.with({ properties }); -const pid = (field?: RootFieldDto) => - field ? field.fieldId : undefined; +const pidof = (field: T) => + Types.is(field, NestedFieldDto) ? field.parentId : undefined; -const pidof = (field: FieldDto) => - Types.is(field, NestedFieldDto) ? field.parentId : undefined; \ No newline at end of file +const pid = (field?: RootFieldDto) => + field ? field.fieldId : undefined; \ No newline at end of file