diff --git a/src/Squidex.Domain.Apps.Core.Model/Apps/Json/JsonLanguagesConfig.cs b/src/Squidex.Domain.Apps.Core.Model/Apps/Json/JsonLanguagesConfig.cs new file mode 100644 index 000000000..8ec216f76 --- /dev/null +++ b/src/Squidex.Domain.Apps.Core.Model/Apps/Json/JsonLanguagesConfig.cs @@ -0,0 +1,63 @@ +// ========================================================================== +// JsonLanguagesConfig.cs +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex Group +// All rights reserved. +// ========================================================================== + +using System.Collections.Generic; +using Newtonsoft.Json; +using Squidex.Infrastructure; + +namespace Squidex.Domain.Apps.Core.Apps.Json +{ + public sealed class JsonLanguagesConfig + { + [JsonProperty] + public Dictionary Languages { get; set; } + + [JsonProperty] + public Language Master { get; set; } + + public JsonLanguagesConfig() + { + } + + public JsonLanguagesConfig(LanguagesConfig value) + { + Languages = new Dictionary(value.Count); + + foreach (LanguageConfig config in value) + { + Languages.Add(config.Language, new JsonLanguageConfig(config)); + } + + Master = value.Master?.Language; + } + + public LanguagesConfig ToConfig() + { + var languagesConfig = new LanguageConfig[Languages?.Count ?? 0]; + + if (Languages != null) + { + var i = 0; + + foreach (var config in Languages) + { + languagesConfig[i++] = config.Value.ToConfig(config.Key); + } + } + + var result = LanguagesConfig.Build(languagesConfig); + + if (Master != null) + { + result = result.MakeMaster(Master); + } + + return result; + } + } +} diff --git a/src/Squidex.Domain.Apps.Core.Model/Apps/Json/LanguagesConfigConverter.cs b/src/Squidex.Domain.Apps.Core.Model/Apps/Json/LanguagesConfigConverter.cs index 1ae94f71c..d720dfca8 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Apps/Json/LanguagesConfigConverter.cs +++ b/src/Squidex.Domain.Apps.Core.Model/Apps/Json/LanguagesConfigConverter.cs @@ -7,7 +7,6 @@ // ========================================================================== using System; -using System.Collections.Generic; using Newtonsoft.Json; using Squidex.Infrastructure.Json; @@ -17,30 +16,16 @@ namespace Squidex.Domain.Apps.Core.Apps.Json { protected override void WriteValue(JsonWriter writer, LanguagesConfig value, JsonSerializer serializer) { - var json = new Dictionary(value.Count); - - foreach (LanguageConfig config in value) - { - json.Add(config.Language, new JsonLanguageConfig(config)); - } + var json = new JsonLanguagesConfig(value); serializer.Serialize(writer, json); } protected override LanguagesConfig ReadValue(JsonReader reader, Type objectType, JsonSerializer serializer) { - var json = serializer.Deserialize>(reader); - - var languagesConfig = new LanguageConfig[json.Count]; - - var i = 0; - - foreach (var config in json) - { - languagesConfig[i++] = config.Value.ToConfig(config.Key); - } + var json = serializer.Deserialize(reader); - return LanguagesConfig.Build(languagesConfig); + return json.ToConfig(); } } } diff --git a/tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/LanguagesConfigJsonTests.cs b/tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/LanguagesConfigJsonTests.cs index cd5ae5eb9..51012e4dd 100644 --- a/tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/LanguagesConfigJsonTests.cs +++ b/tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/LanguagesConfigJsonTests.cs @@ -6,6 +6,7 @@ // All rights reserved. // ========================================================================== +using System.Linq; using FluentAssertions; using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -25,11 +26,14 @@ namespace Squidex.Domain.Apps.Core.Model.Apps var sut = LanguagesConfig.Build( new LanguageConfig(Language.EN), new LanguageConfig(Language.DE, true, Language.EN), - new LanguageConfig(Language.IT, false, Language.DE)); + new LanguageConfig(Language.IT, false, Language.DE)) + .MakeMaster(Language.IT); var serialized = JToken.FromObject(sut, serializer).ToObject(serializer); serialized.ShouldBeEquivalentTo(sut); + + Assert.Same(serialized.FirstOrDefault(x => x.Key == "it"), serialized.Master); } } }