Skip to content

Commit

Permalink
unify codename for content elements
Browse files Browse the repository at this point in the history
  • Loading branch information
Ondřej Chrastina committed Mar 21, 2023
1 parent fee4742 commit 876f83e
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@ public interface IContentElementValue<out T> : IContentElementValue
/// Gets the value of the content element.
/// </summary>
T Value { get; }


}

/// <summary>
Expand Down
9 changes: 6 additions & 3 deletions Kontent.Ai.Delivery.Tests/DeliveryClientTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1085,7 +1085,8 @@ public async Task DynamicResponse()
Assert.NotNull(elementObject.Type);
Assert.NotNull(elementObject.Name);
// TODO think about that one
Assert.Null(elementObject.Codename);
// Assert.Null(elementObject.Codename);
Assert.NotNull(elementObject.Codename);
}
else if (typeof(DateTimeElementValue).IsAssignableFrom(item.Value.GetType()))
{
Expand All @@ -1094,7 +1095,8 @@ public async Task DynamicResponse()
Assert.NotNull(elementObject.Type);
Assert.NotNull(elementObject.Name);
// TODO think about that one
Assert.Null(elementObject.Codename);
// Assert.Null(elementObject.Codename);
Assert.NotNull(elementObject.Codename);

}
else if (typeof(NumberElementValue).IsAssignableFrom(item.Value.GetType()))
Expand All @@ -1104,7 +1106,8 @@ public async Task DynamicResponse()
Assert.NotNull(elementObject.Type);
Assert.NotNull(elementObject.Name);
// TODO think about that one
Assert.Null(elementObject.Codename);
// Assert.Null(elementObject.Codename);
Assert.NotNull(elementObject.Codename);
}
});
Assert.All(response.Item.Elements.OfType<RichTextElementValue>(), item =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,13 @@ internal class ContentElementValue<T> : IContentElementValue<T>
/// <inheritdoc/>
[JsonProperty("codename")]
public string Codename { get; internal set; }

// TODO is that a good idea?
public ContentElementValue<T> WithCodename(string codename)
{
Codename = codename;
return this;
}

}
}
23 changes: 12 additions & 11 deletions Kontent.Ai.Delivery/ContentItems/ModelProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -234,19 +234,19 @@ private ContentItemElements GetAllPropertiesValuesAsync(JObject elementsData, Pr
IContentElementValue value = (element["type"].ToString()) switch
{
// TODO do we want to use string/structured data for rich text - probably think about support both ways
"rich_text" => element.ToObject<RichTextElementValue>(Serializer),
"asset" => element.ToObject<AssetElementValue>(Serializer),
"number" => element.ToObject<NumberElementValue>(Serializer),
"rich_text" => element.ToObject<RichTextElementValue>(Serializer).WithCodename(key),
"asset" => element.ToObject<AssetElementValue>(Serializer).WithCodename(key),
"number" => element.ToObject<NumberElementValue>(Serializer).WithCodename(key),
// TODO do we want to use string/structured data for date time => structured is OK
"date_time" => element.ToObject<DateTimeElementValue>(Serializer),
"multiple_choice" => element.ToObject<MultipleChoiceElementValue>(Serializer),
"taxonomy" => element.ToObject<TaxonomyElementValue>(Serializer),
"date_time" => element.ToObject<DateTimeElementValue>(Serializer).WithCodename(key),
"multiple_choice" => element.ToObject<MultipleChoiceElementValue>(Serializer).WithCodename(key),
"taxonomy" => element.ToObject<TaxonomyElementValue>(Serializer).WithCodename(key),
// TODO what Linked items + what SubPages?
"modular_content" => element.ToObject<ContentElementValue<IEnumerable<string>>>(Serializer),
"custom_element" => element.ToObject<CustomElementValue>(Serializer),
"url_slug" => element.ToObject<UrlSlugElementValue>(Serializer),
"text" => element.ToObject<TextElementValue>(Serializer),
_ => throw new ArgumentException($"Argument type {element["type"].ToString()} not supported.")
"modular_content" => element.ToObject<ContentElementValue<IEnumerable<string>>>(Serializer).WithCodename(key),
"custom" => element.ToObject<CustomElementValue>(Serializer).WithCodename(key),
"url_slug" => element.ToObject<UrlSlugElementValue>(Serializer).WithCodename(key),
"text" => element.ToObject<TextElementValue>(Serializer).WithCodename(key),
_ => throw new ArgumentException($"Argument type ({element["type"].ToString()}) not supported.")
};

// TODO Fix the empty Codename? Probably yes (wrap ToObject with normalization logic)
Expand All @@ -255,6 +255,7 @@ private ContentItemElements GetAllPropertiesValuesAsync(JObject elementsData, Pr
}
return result;
}

private async Task<object> GetPropertyValueAsync(JObject elementsData, PropertyInfo property, JObject linkedItems, ResolvingContext context, IContentItemSystemAttributes itemSystemAttributes, Dictionary<string, object> processedItems, List<PropertyInfo> richTextPropertiesToBeProcessed)
{
var elementDefinition = GetElementData(elementsData, property, itemSystemAttributes);
Expand Down

0 comments on commit 876f83e

Please sign in to comment.