From c05a1e4dfdf766094daef878c045520ced9fe960 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Mon, 16 Apr 2018 17:40:55 +0200 Subject: [PATCH] Introduce isLoaded --- .../state/event-consumers.state.spec.ts | 1 + .../state/event-consumers.state.ts | 11 +- .../administration/state/users.state.spec.ts | 1 + .../administration/state/users.state.ts | 8 +- .../pages/rules/rule-wizard.component.html | 2 +- .../content-changed-trigger.component.ts | 11 +- .../schemas/pages/schema/field.component.ts | 5 +- .../pages/schema/schema-page.component.html | 2 +- .../pages/schema/schema-page.component.ts | 11 +- .../types/string-validation.component.ts | 3 +- .../pages/backups/backups-page.component.html | 128 ++++++++++-------- .../pages/clients/clients-page.component.html | 8 ++ .../pages/clients/clients-page.component.ts | 4 + .../contributors-page.component.html | 110 ++++++++------- .../contributors-page.component.ts | 4 + .../pages/languages/language.component.ts | 4 +- .../patterns/patterns-page.component.html | 8 ++ .../pages/patterns/patterns-page.component.ts | 4 + .../app/shared/state/assets.state.spec.ts | 1 + src/Squidex/app/shared/state/assets.state.ts | 28 ++-- .../app/shared/state/backups.state.spec.ts | 3 + src/Squidex/app/shared/state/backups.state.ts | 14 +- .../app/shared/state/clients.state.spec.ts | 19 ++- src/Squidex/app/shared/state/clients.state.ts | 29 ++-- .../shared/state/contributors.state.spec.ts | 19 ++- .../app/shared/state/contributors.state.ts | 32 +++-- .../app/shared/state/patterns.state.spec.ts | 10 +- .../app/shared/state/patterns.state.ts | 16 ++- src/Squidex/app/shared/state/plans.state.ts | 30 ++-- .../app/shared/state/rules.state.spec.ts | 1 + src/Squidex/app/shared/state/rules.state.ts | 35 ++--- .../app/shared/state/schemas.state.spec.ts | 1 + src/Squidex/app/shared/state/schemas.state.ts | 15 +- 33 files changed, 360 insertions(+), 218 deletions(-) diff --git a/src/Squidex/app/features/administration/state/event-consumers.state.spec.ts b/src/Squidex/app/features/administration/state/event-consumers.state.spec.ts index 778e9b68d..b159f8a20 100644 --- a/src/Squidex/app/features/administration/state/event-consumers.state.spec.ts +++ b/src/Squidex/app/features/administration/state/event-consumers.state.spec.ts @@ -37,6 +37,7 @@ describe('EventConsumersState', () => { it('should load event consumers', () => { expect(eventConsumersState.snapshot.eventConsumers.values).toEqual(oldConsumers); + expect(eventConsumersState.snapshot.isLoaded).toBeTruthy(); dialogs.verify(x => x.notifyInfo(It.isAnyString()), Times.never()); }); diff --git a/src/Squidex/app/features/administration/state/event-consumers.state.ts b/src/Squidex/app/features/administration/state/event-consumers.state.ts index 5bf5a0f74..eb1010423 100644 --- a/src/Squidex/app/features/administration/state/event-consumers.state.ts +++ b/src/Squidex/app/features/administration/state/event-consumers.state.ts @@ -20,12 +20,19 @@ import { EventConsumerDto, EventConsumersService } from './../services/event-con interface Snapshot { eventConsumers: ImmutableArray; + + isLoaded?: false; } @Injectable() export class EventConsumersState extends State { public eventConsumers = - this.changes.map(x => x.eventConsumers); + this.changes.map(x => x.eventConsumers) + .distinctUntilChanged(); + + public isLoaded = + this.changes.map(x => !!x.isLoaded) + .distinctUntilChanged(); constructor( private readonly dialogs: DialogService, @@ -44,7 +51,7 @@ export class EventConsumersState extends State { this.next(s => { const eventConsumers = ImmutableArray.of(dtos); - return { ...s, eventConsumers }; + return { ...s, eventConsumers, isLoaded: true }; }); }) .catch(error => { diff --git a/src/Squidex/app/features/administration/state/users.state.spec.ts b/src/Squidex/app/features/administration/state/users.state.spec.ts index d78ee77cf..57b3649ef 100644 --- a/src/Squidex/app/features/administration/state/users.state.spec.ts +++ b/src/Squidex/app/features/administration/state/users.state.spec.ts @@ -53,6 +53,7 @@ describe('UsersState', () => { it('should load users', () => { expect(usersState.snapshot.users.values).toEqual(oldUsers.map(x => u(x))); expect(usersState.snapshot.usersPager.numberOfItems).toEqual(200); + expect(usersState.snapshot.isLoaded).toBeTruthy(); dialogs.verify(x => x.notifyInfo(It.isAnyString()), Times.never()); }); diff --git a/src/Squidex/app/features/administration/state/users.state.ts b/src/Squidex/app/features/administration/state/users.state.ts index a58fdc912..3a5493e0e 100644 --- a/src/Squidex/app/features/administration/state/users.state.ts +++ b/src/Squidex/app/features/administration/state/users.state.ts @@ -81,6 +81,8 @@ interface Snapshot { usersPager: Pager; usersQuery?: string; + isLoaded?: boolean; + selectedUser?: SnapshotUser; } @@ -98,6 +100,10 @@ export class UsersState extends State { this.changes.map(x => x.selectedUser) .distinctUntilChanged(); + public isLoaded = + this.changes.map(x => !!x.isLoaded) + .distinctUntilChanged(); + constructor( private readonly authState: AuthService, private readonly dialogs: DialogService, @@ -144,7 +150,7 @@ export class UsersState extends State { selectedUser = users.find(x => x.user.id === selectedUser!.user.id) || selectedUser; } - return { ...s, users, usersPager, selectedUser }; + return { ...s, users, usersPager, selectedUser, isLoaded: true }; }); }) .notify(this.dialogs); diff --git a/src/Squidex/app/features/rules/pages/rules/rule-wizard.component.html b/src/Squidex/app/features/rules/pages/rules/rule-wizard.component.html index d8dd97890..f15755dc0 100644 --- a/src/Squidex/app/features/rules/pages/rules/rule-wizard.component.html +++ b/src/Squidex/app/features/rules/pages/rules/rule-wizard.component.html @@ -44,7 +44,7 @@ diff --git a/src/Squidex/app/features/rules/pages/rules/triggers/content-changed-trigger.component.ts b/src/Squidex/app/features/rules/pages/rules/triggers/content-changed-trigger.component.ts index 107a4ca87..10ee7a03e 100644 --- a/src/Squidex/app/features/rules/pages/rules/triggers/content-changed-trigger.component.ts +++ b/src/Squidex/app/features/rules/pages/rules/triggers/content-changed-trigger.component.ts @@ -30,7 +30,7 @@ export interface TriggerSchemaForm { }) export class ContentChangedTriggerComponent implements OnInit { @Input() - public schemas: SchemaDto[]; + public schemas: ImmutableArray; @Input() public trigger: any; @@ -79,12 +79,11 @@ export class ContentChangedTriggerComponent implements OnInit { }).filter(s => s !== null).map(s => s!)).sortByStringAsc(s => s.schema.name); this.schemasToAdd = - ImmutableArray.of( this.schemas.filter(schema => - !triggerSchemas.find(s => s.schemaId === schema.id))) + !triggerSchemas.find(s => s.schemaId === schema.id)) .sortByStringAsc(x => x.name); - this.schemaToAdd = this.schemasToAdd.values[0]; + this.schemaToAdd = this.schemasToAdd.at(0); } public removeSchema(schemaForm: TriggerSchemaForm) { @@ -93,7 +92,7 @@ export class ContentChangedTriggerComponent implements OnInit { this.updateValue(); this.schemasToAdd = this.schemasToAdd.push(schemaForm.schema).sortByStringAsc(x => x.name); - this.schemaToAdd = this.schemasToAdd.values[0]; + this.schemaToAdd = this.schemasToAdd.at(0); } public addSchema() { @@ -111,7 +110,7 @@ export class ContentChangedTriggerComponent implements OnInit { this.updateValue(); this.schemasToAdd = this.schemasToAdd.remove(this.schemaToAdd).sortByStringAsc(x => x.name); - this.schemaToAdd = this.schemasToAdd.values[0]; + this.schemaToAdd = this.schemasToAdd.at(0); } public toggle(schemaForm: TriggerSchemaForm, property: string) { 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 abc8d4406..33f18c2c7 100644 --- a/src/Squidex/app/features/schemas/pages/schema/field.component.ts +++ b/src/Squidex/app/features/schemas/pages/schema/field.component.ts @@ -14,6 +14,7 @@ import { EditFieldForm, fadeAnimation, FieldDto, + ImmutableArray, ModalView, SchemaDetailsDto, SchemasState, @@ -33,10 +34,10 @@ export class FieldComponent implements OnInit { public field: FieldDto; @Input() - public patterns: AppPatternDto; + public schema: SchemaDetailsDto; @Input() - public schema: SchemaDetailsDto; + public patterns: ImmutableArray; public dropdown = new ModalView(false, true); 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 05780d215..c9186f963 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 @@ -61,7 +61,7 @@
- +
+ + + -
- Your have reached the maximum number of backups: 10. -
+ +
+ Your have reached the maximum number of backups: 10. +
- -
- No backups created yet. + +
+ No backups created yet. - -
- -
-
-
-
- -
-
- -
-
- -
-
-
-
- Started: -
-
- Duration: -
-
-
-
- {{backup.started | sqxISODate}} + +
+ +
+
+
+
+ +
+
+ +
+
+ +
-
- {{backup | sqxBackupDuration}} +
+
+ Started: +
+
+ Duration: +
-
-
-
- - Events: {{backup.handledEvents | sqxKNumber}} - , - - Assets: {{backup.handledAssets | sqxKNumber}} - +
+
+ {{backup.started | sqxISODate}} +
+
+ {{backup | sqxBackupDuration}} +
-
- Download: +
+
+ + Events: {{backup.handledEvents | sqxKNumber}} + , + + Assets: {{backup.handledAssets | sqxKNumber}} + +
+
+ Download: - - Ready - + + Ready + +
+
+
+
-
-
-
-
+ \ No newline at end of file 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 3b6605dce..3a9e17b94 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 @@ -4,6 +4,14 @@ Clients + + + + + + 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 8b4a3d4e5..51b58e5d2 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 @@ -35,6 +35,10 @@ export class ClientsPageComponent implements OnInit { this.clientsState.load().onErrorResumeNext().subscribe(); } + public reload() { + this.clientsState.load(true).onErrorResumeNext().subscribe(); + } + public attachClient() { const value = this.addClientForm.submit(); diff --git a/src/Squidex/app/features/settings/pages/contributors/contributors-page.component.html b/src/Squidex/app/features/settings/pages/contributors/contributors-page.component.html index b168d03d2..69f714378 100644 --- a/src/Squidex/app/features/settings/pages/contributors/contributors-page.component.html +++ b/src/Squidex/app/features/settings/pages/contributors/contributors-page.component.html @@ -5,60 +5,70 @@ Contributors + + + + + + - -
- Your plan allows up to {{maxContributors}} contributors. -
-
- - - - - - - - - - - - - - -
- - - {{contributorInfo.contributor.contributorId | sqxUserName}} - - - - -
+ + +
+ Your plan allows up to {{maxContributors}} contributors. +
+
-