diff --git a/src/Squidex.Read/Apps/IAppEntity.cs b/src/Squidex.Read/Apps/IAppEntity.cs index 3d1e8d545..79b7aa401 100644 --- a/src/Squidex.Read/Apps/IAppEntity.cs +++ b/src/Squidex.Read/Apps/IAppEntity.cs @@ -17,10 +17,10 @@ namespace Squidex.Read.Apps Language MasterLanguage { get; } - IEnumerable Clients { get; } + IReadOnlyCollection Clients { get; } - IEnumerable Contributors { get; } + IReadOnlyCollection Contributors { get; } - IEnumerable Languages { get; } + IReadOnlyCollection Languages { get; } } } diff --git a/src/Squidex.Read/Apps/Services/Implementations/CachingAppProvider.cs b/src/Squidex.Read/Apps/Services/Implementations/CachingAppProvider.cs index c30718dde..a047500a6 100644 --- a/src/Squidex.Read/Apps/Services/Implementations/CachingAppProvider.cs +++ b/src/Squidex.Read/Apps/Services/Implementations/CachingAppProvider.cs @@ -88,9 +88,9 @@ namespace Squidex.Read.Apps.Services.Implementations public Task On(Envelope @event) { - if (@event.Payload is AppContributorAssigned || + if (@event.Payload is AppContributorAssigned || @event.Payload is AppContributorRemoved || - @event.Payload is AppClientAttached || + @event.Payload is AppClientAttached || @event.Payload is AppClientRevoked || @event.Payload is AppClientRenamed || @event.Payload is AppLanguageAdded || @@ -108,6 +108,16 @@ namespace Squidex.Read.Apps.Services.Implementations Cache.Remove(cacheKey); } + else + { + var appCreated = @event.Payload as AppCreated; + + if (appCreated != null) + { + Cache.Remove(BuildIdCacheKey(@event.Headers.AggregateId())); + Cache.Remove(BuildNameCacheKey(appCreated.Name)); + } + } return Task.FromResult(true); } diff --git a/src/Squidex.Read/Schemas/Services/Implementations/CachingSchemaProvider.cs b/src/Squidex.Read/Schemas/Services/Implementations/CachingSchemaProvider.cs index 3adad15e5..dad421ada 100644 --- a/src/Squidex.Read/Schemas/Services/Implementations/CachingSchemaProvider.cs +++ b/src/Squidex.Read/Schemas/Services/Implementations/CachingSchemaProvider.cs @@ -89,8 +89,7 @@ namespace Squidex.Read.Schemas.Services.Implementations public Task On(Envelope @event) { - if (@event.Payload is SchemaDeleted || - @event.Payload is SchemaCreated) + if (@event.Payload is SchemaDeleted) { var cacheKey = BuildIdCacheKey(@event.Headers.AggregateId()); @@ -103,6 +102,16 @@ namespace Squidex.Read.Schemas.Services.Implementations Cache.Remove(cacheKey); } + else + { + var schemaCreated = @event.Payload as SchemaCreated; + + if (schemaCreated != null) + { + Cache.Remove(BuildIdCacheKey(@event.Headers.AggregateId())); + Cache.Remove(BuildNameCacheKey(@event.Headers.AppId(), schemaCreated.Name)); + } + } return Task.FromResult(true); } diff --git a/src/Squidex/app/framework/angular/modal-view.directive.ts b/src/Squidex/app/framework/angular/modal-view.directive.ts index bfdd2830a..e2857422f 100644 --- a/src/Squidex/app/framework/angular/modal-view.directive.ts +++ b/src/Squidex/app/framework/angular/modal-view.directive.ts @@ -62,7 +62,10 @@ export class ModalViewDirective implements OnChanges, OnInit, OnDestroy { } public ngOnChanges() { - this.subscription.unsubscribe(); + if (this.subscription) { + this.subscription.unsubscribe(); + this.subscription = null; + } if (this.modalView) { this.subscription = this.modalView.isOpen.subscribe(isOpen => {