diff --git a/backend/src/Squidex.Domain.Apps.Core.Model/Schemas/Fields.cs b/backend/src/Squidex.Domain.Apps.Core.Model/Schemas/Fields.cs index 16760a3a3..d3762d740 100644 --- a/backend/src/Squidex.Domain.Apps.Core.Model/Schemas/Fields.cs +++ b/backend/src/Squidex.Domain.Apps.Core.Model/Schemas/Fields.cs @@ -263,12 +263,18 @@ namespace Squidex.Domain.Apps.Core.Schemas return field.AddField(Boolean(id, name, properties, settings)); } - public static ArrayField AddComponents(this ArrayField field, long id, string name, + public static ArrayField AddComponent(this ArrayField field, long id, string name, ComponentFieldProperties? properties = null, IFieldSettings? settings = null) { return field.AddField(Component(id, name, properties, settings)); } + public static ArrayField AddComponents(this ArrayField field, long id, string name, + ComponentsFieldProperties? properties = null, IFieldSettings? settings = null) + { + return field.AddField(Components(id, name, properties, settings)); + } + public static ArrayField AddDateTime(this ArrayField field, long id, string name, DateTimeFieldProperties? properties = null, IFieldSettings? settings = null) { diff --git a/backend/src/Squidex.Domain.Apps.Core.Operations/ConvertContent/FieldConverters.cs b/backend/src/Squidex.Domain.Apps.Core.Operations/ConvertContent/FieldConverters.cs index 57fb4c92c..74ca1e282 100644 --- a/backend/src/Squidex.Domain.Apps.Core.Operations/ConvertContent/FieldConverters.cs +++ b/backend/src/Squidex.Domain.Apps.Core.Operations/ConvertContent/FieldConverters.cs @@ -280,9 +280,16 @@ namespace Squidex.Domain.Apps.Core.ConvertContent private static IJsonValue? ConvertComponent(IField field, IJsonValue? value, ValueConverter[] converters) { - if (value is JsonObject obj && obj.TryGetValue(Component.Discriminator, out var type) && field.TryGetResolvedSchema(type.Value, out var schema)) + if (value is JsonObject obj && obj.TryGetValue(Component.Discriminator, out var type)) { - return ConvertNested(schema.FieldCollection, obj, null, converters); + if (field.TryGetResolvedSchema(type.Value, out var schema)) + { + return ConvertNested(schema.FieldCollection, obj, null, converters); + } + else + { + return obj; + } } return null; diff --git a/backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/ExtractReferenceIds/ReferenceExtractionTests.cs b/backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/ExtractReferenceIds/ReferenceExtractionTests.cs index 628b7d908..c4ee00a6d 100644 --- a/backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/ExtractReferenceIds/ReferenceExtractionTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/ExtractReferenceIds/ReferenceExtractionTests.cs @@ -31,10 +31,15 @@ namespace Squidex.Domain.Apps.Core.Operations.ExtractReferenceIds .AddAssets(4, "assets2", Partitioning.Invariant) .AddReferences(5, "references", Partitioning.Invariant) .AddArray(6, "array", Partitioning.Invariant, a => a - .AddAssets(31, "nested")); + .AddAssets(31, "nestedAssets") + .AddComponent(32, "nestedComponent") + .AddComponents(33, "nestedComponents")); schema.FieldsById[1].SetResolvedSchema(DomainId.Empty, schema); schema.FieldsById[2].SetResolvedSchema(DomainId.Empty, schema); + + ((IArrayField)schema.FieldsById[6]).FieldsById[32].SetResolvedSchema(DomainId.Empty, schema); + ((IArrayField)schema.FieldsById[6]).FieldsById[33].SetResolvedSchema(DomainId.Empty, schema); } [Fact] @@ -94,7 +99,18 @@ namespace Squidex.Domain.Apps.Core.Operations.ExtractReferenceIds .AddInvariant( JsonValue.Array( JsonValue.Object() - .Add("nested", JsonValue.Array(id1, id2))))) + .Add("nestedAssets", JsonValue.Array(id1, id2)) + .Add("nestedComponent", + JsonValue.Object() + .Add("references", + JsonValue.Array(id1, id2)) + .Add(Component.Discriminator, DomainId.Empty)) + .Add("nestedComponents", + JsonValue.Array( + JsonValue.Object() + .Add("references", + JsonValue.Array(id1, id2)) + .Add(Component.Discriminator, DomainId.Empty)))))) .AddField("component", new ContentFieldData() .AddInvariant( @@ -106,7 +122,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ExtractReferenceIds .Add("array", JsonValue.Array( JsonValue.Object() - .Add("nested", JsonValue.Array(id1, id2)))) + .Add("nestedAssets", JsonValue.Array(id1, id2)))) .Add(Component.Discriminator, DomainId.Empty))) .AddField("components", new ContentFieldData() @@ -120,7 +136,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ExtractReferenceIds .Add("array", JsonValue.Array( JsonValue.Object() - .Add("nested", JsonValue.Array(id1, id2)))) + .Add("nestedAssets", JsonValue.Array(id1, id2)))) .Add(Component.Discriminator, DomainId.Empty)))); var expected = @@ -136,7 +152,18 @@ namespace Squidex.Domain.Apps.Core.Operations.ExtractReferenceIds .AddInvariant( JsonValue.Array( JsonValue.Object() - .Add("nested", JsonValue.Array(id2))))) + .Add("nestedAssets", JsonValue.Array(id2)) + .Add("nestedComponent", + JsonValue.Object() + .Add("references", + JsonValue.Array(id2)) + .Add(Component.Discriminator, DomainId.Empty)) + .Add("nestedComponents", + JsonValue.Array( + JsonValue.Object() + .Add("references", + JsonValue.Array(id2)) + .Add(Component.Discriminator, DomainId.Empty)))))) .AddField("component", new ContentFieldData() .AddInvariant( @@ -148,7 +175,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ExtractReferenceIds .Add("array", JsonValue.Array( JsonValue.Object() - .Add("nested", JsonValue.Array(id2)))) + .Add("nestedAssets", JsonValue.Array(id2)))) .Add(Component.Discriminator, DomainId.Empty))) .AddField("components", new ContentFieldData() @@ -162,7 +189,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ExtractReferenceIds .Add("array", JsonValue.Array( JsonValue.Object() - .Add("nested", JsonValue.Array(id2)))) + .Add("nestedAssets", JsonValue.Array(id2)))) .Add(Component.Discriminator, DomainId.Empty)))); var converter =