diff --git a/src/Squidex/app/features/dashboard/pages/dashboard-page.component.ts b/src/Squidex/app/features/dashboard/pages/dashboard-page.component.ts
index 59f67b101..fe2a97291 100644
--- a/src/Squidex/app/features/dashboard/pages/dashboard-page.component.ts
+++ b/src/Squidex/app/features/dashboard/pages/dashboard-page.component.ts
@@ -51,8 +51,6 @@ export class DashboardPageComponent extends ResourceOwner implements OnInit {
public isPerformanceStacked = false;
- public app = this.appsState.selectedValidApp;
-
public chartOptions = {
responsive: true,
scales: {
@@ -106,7 +104,7 @@ export class DashboardPageComponent extends ResourceOwner implements OnInit {
public ngOnInit() {
this.own(
- this.app.pipe(
+ this.appsState.selectedApp.pipe(
switchMap(app => this.usagesService.getTodayStorage(app.name)))
.subscribe(dto => {
this.assetsCurrent = dto.size;
@@ -114,7 +112,7 @@ export class DashboardPageComponent extends ResourceOwner implements OnInit {
}));
this.own(
- this.app.pipe(
+ this.appsState.selectedApp.pipe(
switchMap(app => this.usagesService.getMonthCalls(app.name)))
.subscribe(dto => {
this.callsCurrent = dto.count;
@@ -122,14 +120,14 @@ export class DashboardPageComponent extends ResourceOwner implements OnInit {
}));
this.own(
- this.app.pipe(
+ this.appsState.selectedApp.pipe(
switchMap(app => this.historyService.getHistory(app.name, '')))
.subscribe(dto => {
this.history = dto;
}));
this.own(
- this.app.pipe(
+ this.appsState.selectedApp.pipe(
switchMap(app => this.usagesService.getStorageUsages(app.name, DateTime.today().addDays(-20), DateTime.today())))
.subscribe(dtos => {
const labels = createLabels(dtos);
@@ -166,7 +164,7 @@ export class DashboardPageComponent extends ResourceOwner implements OnInit {
}));
this.own(
- this.app.pipe(
+ this.appsState.selectedApp.pipe(
switchMap(app => this.usagesService.getCallsUsages(app.name, DateTime.today().addDays(-20), DateTime.today())))
.subscribe(dtos => {
const labels = createLabelsFromSet(dtos);
@@ -215,5 +213,4 @@ function createLabels(dtos: { date: DateTime }[]): string[] {
function createLabelsFromSet(dtos: { [category: string]: { date: DateTime }[] }): string[] {
return createLabels(dtos[Object.keys(dtos)[0]]);
-}
-
+}
\ No newline at end of file
diff --git a/src/Squidex/app/features/rules/declarations.ts b/src/Squidex/app/features/rules/declarations.ts
index e8d6e49d0..c7b176948 100644
--- a/src/Squidex/app/features/rules/declarations.ts
+++ b/src/Squidex/app/features/rules/declarations.ts
@@ -12,6 +12,7 @@ export * from './pages/rules/triggers/content-changed-trigger.component';
export * from './pages/rules/triggers/schema-changed-trigger.component';
export * from './pages/rules/triggers/usage-trigger.component';
+export * from './pages/rules/rule.component';
export * from './pages/rules/rule-element.component';
export * from './pages/rules/rule-wizard.component';
export * from './pages/rules/rules-page.component';
diff --git a/src/Squidex/app/features/rules/module.ts b/src/Squidex/app/features/rules/module.ts
index 78b84b860..10285cbaf 100644
--- a/src/Squidex/app/features/rules/module.ts
+++ b/src/Squidex/app/features/rules/module.ts
@@ -18,6 +18,7 @@ import {
AssetChangedTriggerComponent,
ContentChangedTriggerComponent,
GenericActionComponent,
+ RuleComponent,
RuleElementComponent,
RuleEventBadgeClassPipe,
RuleEventsPageComponent,
@@ -57,6 +58,7 @@ const routes: Routes = [
AssetChangedTriggerComponent,
ContentChangedTriggerComponent,
GenericActionComponent,
+ RuleComponent,
RuleElementComponent,
RuleEventBadgeClassPipe,
RuleEventsPageComponent,
diff --git a/src/Squidex/app/features/rules/pages/events/rule-events-page.component.html b/src/Squidex/app/features/rules/pages/events/rule-events-page.component.html
index a53333758..fb59e4e5d 100644
--- a/src/Squidex/app/features/rules/pages/events/rule-events-page.component.html
+++ b/src/Squidex/app/features/rules/pages/events/rule-events-page.component.html
@@ -1,4 +1,4 @@
-
+
diff --git a/src/Squidex/app/features/rules/pages/events/rule-events-page.component.ts b/src/Squidex/app/features/rules/pages/events/rule-events-page.component.ts
index 298d0a6f3..7a91b0d22 100644
--- a/src/Squidex/app/features/rules/pages/events/rule-events-page.component.ts
+++ b/src/Squidex/app/features/rules/pages/events/rule-events-page.component.ts
@@ -8,7 +8,6 @@
import { Component, OnInit } from '@angular/core';
import {
- AppsState,
RuleEventDto,
RuleEventsState
} from '@app/shared';
@@ -22,7 +21,6 @@ export class RuleEventsPageComponent implements OnInit {
public selectedEventId: string | null = null;
constructor(
- public readonly appsState: AppsState,
public readonly ruleEventsState: RuleEventsState
) {
}
@@ -58,5 +56,4 @@ export class RuleEventsPageComponent implements OnInit {
public trackByRuleEvent(index: number, ruleEvent: RuleEventDto) {
return ruleEvent.id;
}
-}
-
+}
\ No newline at end of file
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 6c47ce087..88d7562d4 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
@@ -27,18 +27,6 @@ export const MODE_EDIT_ACTION = 'EditAction';
templateUrl: './rule-wizard.component.html'
})
export class RuleWizardComponent implements AfterViewInit, OnInit {
- public actionForm = new Form(new FormGroup({}));
- public actionType: string;
- public action: any = {};
-
- public triggerForm = new Form(new FormGroup({}));
- public triggerType: string;
- public trigger: any = {};
-
- public isEditable: boolean;
-
- public step = 1;
-
@Output()
public complete = new EventEmitter();
@@ -57,6 +45,18 @@ export class RuleWizardComponent implements AfterViewInit, OnInit {
@Input()
public mode = MODE_WIZARD;
+ public actionForm = new Form(new FormGroup({}));
+ public actionType: string;
+ public action: any = {};
+
+ public triggerForm = new Form(new FormGroup({}));
+ public triggerType: string;
+ public trigger: any = {};
+
+ public isEditable: boolean;
+
+ public step = 1;
+
constructor(
private readonly rulesState: RulesState
) {
diff --git a/src/Squidex/app/features/rules/pages/rules/rule.component.ts b/src/Squidex/app/features/rules/pages/rules/rule.component.ts
new file mode 100644
index 000000000..f4ce4d4e3
--- /dev/null
+++ b/src/Squidex/app/features/rules/pages/rules/rule.component.ts
@@ -0,0 +1,87 @@
+/*
+ * Squidex Headless CMS
+ *
+ * @license
+ * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved.
+ */
+
+// tslint:disable: component-selector
+
+import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
+
+import {
+ ActionsDto,
+ RuleDto,
+ RulesState,
+ TriggersDto
+} from '@app/shared';
+
+@Component({
+ selector: '[sqxRule]',
+ template: `
+
+
+ If
+ |
+
+
+
+
+ |
+
+ then
+ |
+
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
`,
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class RuleComponent {
+ @Output()
+ public editTrigger = new EventEmitter();
+
+ @Output()
+ public editAction = new EventEmitter();
+
+ @Input()
+ public ruleTriggers: TriggersDto;
+
+ @Input()
+ public ruleActions: ActionsDto;
+
+ @Input('sqxRule')
+ public rule: RuleDto;
+
+ constructor(
+ private readonly rulesState: RulesState
+ ) {
+ }
+
+ public delete() {
+ this.rulesState.delete(this.rule);
+ }
+
+ public toggle() {
+ if (this.rule.isEnabled) {
+ this.rulesState.disable(this.rule);
+ } else {
+ this.rulesState.enable(this.rule);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Squidex/app/features/rules/pages/rules/rules-page.component.html b/src/Squidex/app/features/rules/pages/rules/rules-page.component.html
index 7a346488f..f13600229 100644
--- a/src/Squidex/app/features/rules/pages/rules/rules-page.component.html
+++ b/src/Squidex/app/features/rules/pages/rules/rules-page.component.html
@@ -1,4 +1,4 @@
-
+
@@ -32,38 +32,14 @@
-
-
-
- If
- |
-
-
-
-
- |
-
- then
- |
-
-
-
-
- |
-
-
- |
-
-
- |
-
-
+
diff --git a/src/Squidex/app/features/rules/pages/rules/rules-page.component.ts b/src/Squidex/app/features/rules/pages/rules/rules-page.component.ts
index ff75e7716..7418562e5 100644
--- a/src/Squidex/app/features/rules/pages/rules/rules-page.component.ts
+++ b/src/Squidex/app/features/rules/pages/rules/rules-page.component.ts
@@ -9,7 +9,6 @@ import { Component, OnInit } from '@angular/core';
import {
ALL_TRIGGERS,
- AppsState,
DialogModel,
RuleDto,
RuleElementDto,
@@ -33,7 +32,6 @@ export class RulesPageComponent implements OnInit {
public ruleTriggers = ALL_TRIGGERS;
constructor(
- public readonly appsState: AppsState,
public readonly rulesState: RulesState,
public readonly rulesService: RulesService,
public readonly schemasState: SchemasState
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 d223ab8ed..9984f9935 100644
--- a/src/Squidex/app/features/schemas/pages/schema/field.component.ts
+++ b/src/Squidex/app/features/schemas/pages/schema/field.component.ts
@@ -131,5 +131,4 @@ export class FieldComponent implements OnChanges {
public trackByField(index: number, field: NestedFieldDto) {
return field.fieldId + this.schema.id;
}
-}
-
+}
\ No newline at end of file
diff --git a/src/Squidex/app/features/schemas/pages/schema/schema-page.component.html b/src/Squidex/app/features/schemas/pages/schema/schema-page.component.html
index c2a72eea0..a4689d3e4 100644
--- a/src/Squidex/app/features/schemas/pages/schema/schema-page.component.html
+++ b/src/Squidex/app/features/schemas/pages/schema/schema-page.component.html
@@ -1,4 +1,4 @@
-
+
diff --git a/src/Squidex/app/features/schemas/pages/schema/schema-page.component.ts b/src/Squidex/app/features/schemas/pages/schema/schema-page.component.ts
index 250aedc9d..1f5ef7fd9 100644
--- a/src/Squidex/app/features/schemas/pages/schema/schema-page.component.ts
+++ b/src/Squidex/app/features/schemas/pages/schema/schema-page.component.ts
@@ -11,7 +11,6 @@ import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import {
- AppsState,
DialogModel,
fadeAnimation,
FieldDto,
@@ -51,7 +50,6 @@ export class SchemaPageComponent extends ResourceOwner implements OnInit {
public trackByFieldFn: Function;
constructor(
- public readonly appsState: AppsState,
public readonly schemasState: SchemasState,
public readonly patternsState: PatternsState,
private readonly route: ActivatedRoute,
@@ -69,9 +67,7 @@ export class SchemaPageComponent extends ResourceOwner implements OnInit {
this.own(
this.schemasState.selectedSchema
.subscribe(schema => {
- if (schema) {
- this.schema = schema;
- }
+ this.schema = schema;
}));
}
@@ -105,5 +101,4 @@ export class SchemaPageComponent extends ResourceOwner implements OnInit {
private back() {
this.router.navigate(['../'], { relativeTo: this.route });
}
-}
-
+}
\ No newline at end of file
diff --git a/src/Squidex/app/features/schemas/pages/schemas/schemas-page.component.html b/src/Squidex/app/features/schemas/pages/schemas/schemas-page.component.html
index 6af0c2b56..52bd7698f 100644
--- a/src/Squidex/app/features/schemas/pages/schemas/schemas-page.component.html
+++ b/src/Squidex/app/features/schemas/pages/schemas/schemas-page.component.html
@@ -1,4 +1,4 @@
-
+
diff --git a/src/Squidex/app/features/schemas/pages/schemas/schemas-page.component.ts b/src/Squidex/app/features/schemas/pages/schemas/schemas-page.component.ts
index 10b07fade..a0425dacc 100644
--- a/src/Squidex/app/features/schemas/pages/schemas/schemas-page.component.ts
+++ b/src/Squidex/app/features/schemas/pages/schemas/schemas-page.component.ts
@@ -11,7 +11,6 @@ import { ActivatedRoute, Router } from '@angular/router';
import { map } from 'rxjs/operators';
import {
- AppsState,
CreateCategoryForm,
DialogModel,
MessageBus,
@@ -37,7 +36,6 @@ export class SchemasPageComponent extends ResourceOwner implements OnInit {
public import: any;
constructor(
- public readonly appsState: AppsState,
public readonly schemasState: SchemasState,
private readonly formBuilder: FormBuilder,
private readonly messageBus: MessageBus,
@@ -98,5 +96,4 @@ export class SchemasPageComponent extends ResourceOwner implements OnInit {
public trackByCategory(index: number, category: SchemaCategory) {
return category.name;
}
-}
-
+}
\ No newline at end of file
diff --git a/src/Squidex/app/features/settings/declarations.ts b/src/Squidex/app/features/settings/declarations.ts
index 32b8bfd08..367ab79ee 100644
--- a/src/Squidex/app/features/settings/declarations.ts
+++ b/src/Squidex/app/features/settings/declarations.ts
@@ -5,20 +5,27 @@
* Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved.
*/
+export * from './pages/backups/backup.component';
export * from './pages/backups/backups-page.component';
-export * from './pages/backups/pipes';
+export * from './pages/clients/client-add-form.component';
export * from './pages/clients/client.component';
export * from './pages/clients/clients-page.component';
+export * from './pages/contributors/contributor-add-form.component';
+export * from './pages/contributors/contributor.component';
export * from './pages/contributors/contributors-page.component';
export * from './pages/contributors/import-contributors-dialog.component';
+export * from './pages/languages/language-add-form.component';
export * from './pages/languages/language.component';
export * from './pages/languages/languages-page.component';
export * from './pages/more/more-page.component';
export * from './pages/patterns/pattern.component';
export * from './pages/patterns/patterns-page.component';
+export * from './pages/plans/plan.component';
export * from './pages/plans/plans-page.component';
+export * from './pages/roles/role-add-form.component';
export * from './pages/roles/role.component';
export * from './pages/roles/roles-page.component';
+export * from './pages/workflows/workflow-add-form.component';
export * from './pages/workflows/workflow-step.component';
export * from './pages/workflows/workflow-transition.component';
export * from './pages/workflows/workflow.component';
diff --git a/src/Squidex/app/features/settings/module.ts b/src/Squidex/app/features/settings/module.ts
index 2cb535224..1a11eea50 100644
--- a/src/Squidex/app/features/settings/module.ts
+++ b/src/Squidex/app/features/settings/module.ts
@@ -16,21 +16,28 @@ import {
} from '@app/shared';
import {
- BackupDurationPipe,
+ BackupComponent,
BackupsPageComponent,
+ ClientAddFormComponent,
ClientComponent,
ClientsPageComponent,
+ ContributorAddFormComponent,
+ ContributorComponent,
ContributorsPageComponent,
ImportContributorsDialogComponent,
+ LanguageAddFormComponent,
LanguageComponent,
LanguagesPageComponent,
MorePageComponent,
PatternComponent,
PatternsPageComponent,
+ PlanComponent,
PlansPageComponent,
+ RoleAddFormComponent,
RoleComponent,
RolesPageComponent,
SettingsAreaComponent,
+ WorkflowAddFormComponent,
WorkflowComponent,
WorkflowsPageComponent,
WorkflowStepComponent,
@@ -196,25 +203,32 @@ const routes: Routes = [
RouterModule.forChild(routes)
],
declarations: [
- BackupDurationPipe,
+ BackupComponent,
BackupsPageComponent,
+ ClientAddFormComponent,
ClientComponent,
ClientsPageComponent,
+ ContributorAddFormComponent,
+ ContributorComponent,
ContributorsPageComponent,
ImportContributorsDialogComponent,
+ LanguageAddFormComponent,
LanguageComponent,
LanguagesPageComponent,
MorePageComponent,
PatternComponent,
PatternsPageComponent,
+ PlanComponent,
PlansPageComponent,
+ RoleAddFormComponent,
RoleComponent,
RolesPageComponent,
SettingsAreaComponent,
+ WorkflowAddFormComponent,
WorkflowComponent,
WorkflowsPageComponent,
- WorkflowTransitionComponent,
- WorkflowStepComponent
+ WorkflowStepComponent,
+ WorkflowTransitionComponent
]
})
export class SqxFeatureSettingsModule {}
\ No newline at end of file
diff --git a/src/Squidex/app/features/settings/pages/backups/backup.component.ts b/src/Squidex/app/features/settings/pages/backups/backup.component.ts
new file mode 100644
index 000000000..f99bed7ce
--- /dev/null
+++ b/src/Squidex/app/features/settings/pages/backups/backup.component.ts
@@ -0,0 +1,87 @@
+/*
+ * Squidex Headless CMS
+ *
+ * @license
+ * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved.
+ */
+
+import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
+
+import {
+ ApiUrlConfig,
+ BackupDto,
+ BackupsState,
+ Duration
+} from '@app/shared';
+
+@Component({
+ selector: 'sqx-backup',
+ template: `
+
+
+
+
+
+
+
+ Started:
+
+
+ Duration:
+
+
+
+
+ {{backup.started | sqxFromNow}}
+
+
+ {{duration}}
+
+
+
+
+
+ Events: {{backup.handledEvents | sqxKNumber}}
+ ,
+
+ Assets: {{backup.handledAssets | sqxKNumber}}
+
+
+
+
+
+
+
+
+
`,
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class BackupComponent {
+ @Input()
+ public backup: BackupDto;
+
+ public get duration() {
+ return Duration.create(this.backup.started, this.backup.stopped!).toString();
+ }
+
+ constructor(
+ public readonly apiUrl: ApiUrlConfig, private readonly backupsState: BackupsState
+ ) {
+ }
+
+ public delete() {
+ this.backupsState.delete(this.backup);
+ }
+}
\ No newline at end of file
diff --git a/src/Squidex/app/features/settings/pages/backups/backups-page.component.html b/src/Squidex/app/features/settings/pages/backups/backups-page.component.html
index 820645e5b..60632ea47 100644
--- a/src/Squidex/app/features/settings/pages/backups/backups-page.component.html
+++ b/src/Squidex/app/features/settings/pages/backups/backups-page.component.html
@@ -1,4 +1,4 @@
-
+
@@ -30,56 +30,10 @@
Start Backup
diff --git a/src/Squidex/app/features/settings/pages/backups/backups-page.component.ts b/src/Squidex/app/features/settings/pages/backups/backups-page.component.ts
index 13c0ce496..96299f082 100644
--- a/src/Squidex/app/features/settings/pages/backups/backups-page.component.ts
+++ b/src/Squidex/app/features/settings/pages/backups/backups-page.component.ts
@@ -11,7 +11,6 @@ import { onErrorResumeNext, switchMap } from 'rxjs/operators';
import {
ApiUrlConfig,
- AppsState,
BackupDto,
BackupsState,
ResourceOwner
@@ -25,7 +24,6 @@ import {
export class BackupsPageComponent extends ResourceOwner implements OnInit {
constructor(
public readonly apiUrl: ApiUrlConfig,
- public readonly appsState: AppsState,
public readonly backupsState: BackupsState
) {
super();
@@ -47,12 +45,7 @@ export class BackupsPageComponent extends ResourceOwner implements OnInit {
this.backupsState.start();
}
- public delete(backup: BackupDto) {
- this.backupsState.delete(backup);
- }
-
public trackByBackup(index: number, item: BackupDto) {
return item.id;
}
-}
-
+}
\ No newline at end of file
diff --git a/src/Squidex/app/features/settings/pages/backups/pipes.ts b/src/Squidex/app/features/settings/pages/backups/pipes.ts
deleted file mode 100644
index d73192f42..000000000
--- a/src/Squidex/app/features/settings/pages/backups/pipes.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Squidex Headless CMS
- *
- * @license
- * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved.
- */
-
-import { Pipe, PipeTransform } from '@angular/core';
-
-import { BackupDto, Duration } from '@app/shared';
-
-@Pipe({
- name: 'sqxBackupDuration',
- pure: true
-})
-export class BackupDurationPipe implements PipeTransform {
- public transform(backup: BackupDto) {
- return Duration.create(backup.started, backup.stopped!).toString();
- }
-}
\ No newline at end of file
diff --git a/src/Squidex/app/features/settings/pages/clients/client-add-form.component.ts b/src/Squidex/app/features/settings/pages/clients/client-add-form.component.ts
new file mode 100644
index 000000000..e48e6f9ac
--- /dev/null
+++ b/src/Squidex/app/features/settings/pages/clients/client-add-form.component.ts
@@ -0,0 +1,60 @@
+/*
+ * Squidex Headless CMS
+ *
+ * @license
+ * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved.
+ */
+
+import { ChangeDetectionStrategy, Component } from '@angular/core';
+import { FormBuilder } from '@angular/forms';
+
+import { AddClientForm, ClientsState } from '@app/shared';
+
+@Component({
+ selector: 'sqx-client-add-form',
+ template: `
+ `,
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class ClientAddFormComponent {
+ public addClientForm = new AddClientForm(this.formBuilder);
+
+ constructor(
+ private readonly clientsState: ClientsState,
+ private readonly formBuilder: FormBuilder
+ ) {
+ }
+
+ public addClient() {
+ const value = this.addClientForm.submit();
+
+ if (value) {
+ this.clientsState.attach({ id: value.name })
+ .subscribe(() => {
+ this.addClientForm.submitCompleted();
+ }, error => {
+ this.addClientForm.submitFailed(error);
+ });
+ }
+ }
+
+ public cancel() {
+ this.addClientForm.submitCompleted();
+ }
+}
\ No newline at end of file
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 fc92677c5..31f809387 100644
--- a/src/Squidex/app/features/settings/pages/clients/client.component.ts
+++ b/src/Squidex/app/features/settings/pages/clients/client.component.ts
@@ -5,7 +5,7 @@
* Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved.
*/
-import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';
+import { ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges } from '@angular/core';
import {
AccessTokenDto,
@@ -16,13 +16,18 @@ import {
ClientsState,
DialogModel,
DialogService,
+ fadeAnimation,
RoleDto
} from '@app/shared';
@Component({
selector: 'sqx-client',
styleUrls: ['./client.component.scss'],
- templateUrl: './client.component.html'
+ templateUrl: './client.component.html',
+ animations: [
+ fadeAnimation
+ ],
+ changeDetection: ChangeDetectionStrategy.OnPush
})
export class ClientComponent implements OnChanges {
@Input()
diff --git a/src/Squidex/app/features/settings/pages/clients/clients-page.component.html b/src/Squidex/app/features/settings/pages/clients/clients-page.component.html
index 420a3d3bb..344e4efb2 100644
--- a/src/Squidex/app/features/settings/pages/clients/clients-page.component.html
+++ b/src/Squidex/app/features/settings/pages/clients/clients-page.component.html
@@ -1,4 +1,4 @@
-