diff --git a/src/Squidex.Domain.Apps.Entities/Assets/AssetCommandMiddleware.cs b/src/Squidex.Domain.Apps.Entities/Assets/AssetCommandMiddleware.cs index 9be779afa..6d27c29c2 100644 --- a/src/Squidex.Domain.Apps.Entities/Assets/AssetCommandMiddleware.cs +++ b/src/Squidex.Domain.Apps.Entities/Assets/AssetCommandMiddleware.cs @@ -73,6 +73,7 @@ namespace Squidex.Domain.Apps.Entities.Assets var result = new AssetCreatedResult(existing, true); context.Complete(result); + await next(); return; } } @@ -128,7 +129,7 @@ namespace Squidex.Domain.Apps.Entities.Assets private async Task HandleCoreAsync(CommandContext context, Func next) { - await HandleAsync(context, next); + await base.HandleAsync(context, next); if (context.PlainResult is IAssetEntity asset && !(context.PlainResult is IAssetEntityEnriched)) { diff --git a/src/Squidex.Domain.Apps.Entities/Contents/ContentCommandMiddleware.cs b/src/Squidex.Domain.Apps.Entities/Contents/ContentCommandMiddleware.cs index 3178216fd..eafb420de 100644 --- a/src/Squidex.Domain.Apps.Entities/Contents/ContentCommandMiddleware.cs +++ b/src/Squidex.Domain.Apps.Entities/Contents/ContentCommandMiddleware.cs @@ -28,7 +28,7 @@ namespace Squidex.Domain.Apps.Entities.Contents public override async Task HandleAsync(CommandContext context, Func next) { - await HandleAsync(context, next); + await base.HandleAsync(context, next); if (context.PlainResult is IContentEntity content) { diff --git a/src/Squidex.Domain.Apps.Entities/Contents/ContentEnricher.cs b/src/Squidex.Domain.Apps.Entities/Contents/ContentEnricher.cs index 428506c61..c4363c9ea 100644 --- a/src/Squidex.Domain.Apps.Entities/Contents/ContentEnricher.cs +++ b/src/Squidex.Domain.Apps.Entities/Contents/ContentEnricher.cs @@ -72,19 +72,24 @@ namespace Squidex.Domain.Apps.Entities.Contents private async Task ResolveColorAsync(IContentEntity content, ContentEntity result, Dictionary<(Guid, Status), StatusInfo> cache) { - if (!cache.TryGetValue((content.SchemaId.Id, content.Status), out var info)) + result.StatusColor = await GetColorAsync(content.SchemaId, content.Status, cache); + } + + private async Task GetColorAsync(NamedId schemaId, Status status, Dictionary<(Guid, Status), StatusInfo> cache) + { + if (!cache.TryGetValue((schemaId.Id, status), out var info)) { - info = await contentWorkflow.GetInfoAsync(content.Status); + info = await contentWorkflow.GetInfoAsync(status); if (info == null) { - info = new StatusInfo(content.Status, DefaultColor); + info = new StatusInfo(status, DefaultColor); } - cache[(content.SchemaId.Id, content.Status)] = info; + cache[(schemaId.Id, status)] = info; } - result.StatusColor = info.Color; + return info.Color; } } } diff --git a/src/Squidex.Domain.Apps.Entities/History/ParsedHistoryEvent.cs b/src/Squidex.Domain.Apps.Entities/History/ParsedHistoryEvent.cs index 92f18d5a2..7e5c018b3 100644 --- a/src/Squidex.Domain.Apps.Entities/History/ParsedHistoryEvent.cs +++ b/src/Squidex.Domain.Apps.Entities/History/ParsedHistoryEvent.cs @@ -53,14 +53,17 @@ namespace Squidex.Domain.Apps.Entities.History message = new Lazy(() => { - var result = texts[item.Message]; - - foreach (var kvp in item.Parameters) + if (texts.TryGetValue(item.Message, out var result)) { - result = result.Replace("[" + kvp.Key + "]", kvp.Value); + foreach (var kvp in item.Parameters) + { + result = result.Replace("[" + kvp.Key + "]", kvp.Value); + } + + return result; } - return result; + return null; }); } } diff --git a/src/Squidex.Infrastructure/EventSourcing/DefaultEventDataFormatter.cs b/src/Squidex.Infrastructure/EventSourcing/DefaultEventDataFormatter.cs index bbf07c80e..e3f800f4b 100644 --- a/src/Squidex.Infrastructure/EventSourcing/DefaultEventDataFormatter.cs +++ b/src/Squidex.Infrastructure/EventSourcing/DefaultEventDataFormatter.cs @@ -6,6 +6,7 @@ // ========================================================================== using System; +using System.Diagnostics; using Squidex.Infrastructure.Json; namespace Squidex.Infrastructure.EventSourcing @@ -33,6 +34,11 @@ namespace Squidex.Infrastructure.EventSourcing if (payloadObj is IMigrated migratedEvent) { payloadObj = migratedEvent.Migrate(); + + if (ReferenceEquals(migratedEvent, payloadObj)) + { + Debug.WriteLine("Migration should return new event."); + } } var envelope = new Envelope(payloadObj, eventData.Headers); @@ -47,6 +53,11 @@ namespace Squidex.Infrastructure.EventSourcing if (migrate && eventPayload is IMigrated migratedEvent) { eventPayload = migratedEvent.Migrate(); + + if (ReferenceEquals(migratedEvent, eventPayload)) + { + Debug.WriteLine("Migration should return new event."); + } } var payloadType = typeNameRegistry.GetName(eventPayload.GetType()); diff --git a/src/Squidex/Areas/Api/Controllers/History/HistoryController.cs b/src/Squidex/Areas/Api/Controllers/History/HistoryController.cs index cb2b1ecde..4a208143c 100644 --- a/src/Squidex/Areas/Api/Controllers/History/HistoryController.cs +++ b/src/Squidex/Areas/Api/Controllers/History/HistoryController.cs @@ -5,6 +5,7 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== +using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Squidex.Areas.Api.Controllers.History.Models; @@ -48,7 +49,7 @@ namespace Squidex.Areas.Api.Controllers.History { var events = await historyService.QueryByChannelAsync(AppId, channel, 100); - var response = events.ToArray(HistoryEventDto.FromHistoryEvent); + var response = events.Select(HistoryEventDto.FromHistoryEvent).Where(x => x.Message != null).ToArray(); return Ok(response); } diff --git a/src/Squidex/app-config/webpack.config.js b/src/Squidex/app-config/webpack.config.js index eea01650c..8c46363b7 100644 --- a/src/Squidex/app-config/webpack.config.js +++ b/src/Squidex/app-config/webpack.config.js @@ -251,7 +251,9 @@ module.exports = function (env) { waitForLinting: isProduction }) ); + } + if (!isCoverage) { config.plugins.push( new plugins.NgToolsWebpack.AngularCompilerPlugin({ directTemplateLoading: true, diff --git a/src/Squidex/app/features/content/pages/content/content-page.component.html b/src/Squidex/app/features/content/pages/content/content-page.component.html index 22454ce68..71bd34cf4 100644 --- a/src/Squidex/app/features/content/pages/content/content-page.component.html +++ b/src/Squidex/app/features/content/pages/content/content-page.component.html @@ -36,6 +36,7 @@ [class.active]="dropdown.isOpen | async" #optionsButton> - - Status to {{status}} + + Change to {{info.status}} diff --git a/src/Squidex/app/features/content/pages/contents/contents-page.component.ts b/src/Squidex/app/features/content/pages/contents/contents-page.component.ts index a95df25f2..f9f08e2c3 100644 --- a/src/Squidex/app/features/content/pages/contents/contents-page.component.ts +++ b/src/Squidex/app/features/content/pages/contents/contents-page.component.ts @@ -207,8 +207,8 @@ export class ContentsPageComponent extends ResourceOwner implements OnInit { const allActions = {}; for (let content of this.contentsState.snapshot.contents.values) { - for (let status of content.statusUpdates) { - allActions[status] = true; + for (let info of content.statusUpdates) { + allActions[info.status] = info.color; } } diff --git a/src/Squidex/app/features/content/shared/content-item.component.html b/src/Squidex/app/features/content/shared/content-item.component.html index 2569c05e1..201ff85f9 100644 --- a/src/Squidex/app/features/content/shared/content-item.component.html +++ b/src/Squidex/app/features/content/shared/content-item.component.html @@ -24,6 +24,7 @@ @@ -55,8 +56,8 @@