diff --git a/src/VirtoCommerce.Xapi.Core/Extensions/IHasLanguageExtensions.cs b/src/VirtoCommerce.Xapi.Core/Extensions/IHasLanguageExtensions.cs
index 308ed22..4a7b0c1 100644
--- a/src/VirtoCommerce.Xapi.Core/Extensions/IHasLanguageExtensions.cs
+++ b/src/VirtoCommerce.Xapi.Core/Extensions/IHasLanguageExtensions.cs
@@ -8,6 +8,17 @@ namespace VirtoCommerce.Xapi.Core.Extensions
{
public static class IHasLanguageExtensions
{
+ ///
+ /// Looking for first best-match language-specific value in the enumerable
+ ///
+ /// An enumerable with values to search
+ /// Language to search
+ /// First matching item to the specified language
+ public static IHasLanguageCode FirstBestMatchForLanguage(this IEnumerable hasLanguages, string language)
+ {
+ return hasLanguages.FirstBestMatchForLanguage(x => x.LanguageCode, language);
+ }
+
///
/// Looking for first best-match language-specific value in the enumerable, based on specified language value selector function
///
@@ -20,12 +31,14 @@ public static T FirstBestMatchForLanguage(this IEnumerable hasLanguages, F
{
ArgumentNullException.ThrowIfNull(hasLanguages);
- //Try find object for passed language event if it null
- var result = hasLanguages.FirstOrDefault(x => langSelector(x)?.EqualsIgnoreCase(language) ?? langSelector(x) == language);
+ var hasLanguagesCollection = hasLanguages as ICollection ?? hasLanguages.ToList();
+
+ //Try to find object for passed language event if it is null
+ var result = hasLanguagesCollection.FirstOrDefault(x => langSelector(x)?.EqualsIgnoreCase(language) ?? langSelector(x) == language);
if (result == null)
{
//find the first with no language set
- result = hasLanguages.FirstOrDefault(x => langSelector(x) == null);
+ result = hasLanguagesCollection.FirstOrDefault(x => langSelector(x) == null);
}
return result;
}
@@ -41,16 +54,5 @@ public static IHasLanguage FirstBestMatchForLanguage(this IEnumerable x.LanguageCode, language);
}
-
- ///
- /// Looking for first best-match language-specific value in the enumerable
- ///
- /// An enumerable with values to search
- /// Language to search
- /// First matching item to the specified language
- public static IHasLanguageCode FirstBestMatchForLanguage(this IEnumerable hasLanguages, string language)
- {
- return hasLanguages.FirstBestMatchForLanguage(x => x.LanguageCode, language);
- }
}
}
diff --git a/src/VirtoCommerce.Xapi.Core/Models/Facets/RangeFacetResult.cs b/src/VirtoCommerce.Xapi.Core/Models/Facets/RangeFacetResult.cs
index 34f3ab3..0119509 100644
--- a/src/VirtoCommerce.Xapi.Core/Models/Facets/RangeFacetResult.cs
+++ b/src/VirtoCommerce.Xapi.Core/Models/Facets/RangeFacetResult.cs
@@ -10,5 +10,7 @@ public RangeFacetResult()
}
public IList Ranges { get; set; } = new List();
+
+ public RangeFacetStatistics Statistics { get; set; }
}
}
diff --git a/src/VirtoCommerce.Xapi.Core/Models/Facets/RangeFacetStatistics.cs b/src/VirtoCommerce.Xapi.Core/Models/Facets/RangeFacetStatistics.cs
new file mode 100644
index 0000000..9bfa9c3
--- /dev/null
+++ b/src/VirtoCommerce.Xapi.Core/Models/Facets/RangeFacetStatistics.cs
@@ -0,0 +1,7 @@
+namespace VirtoCommerce.Xapi.Core.Models.Facets;
+
+public class RangeFacetStatistics
+{
+ public double? Max { get; set; }
+ public double? Min { get; set; }
+}
diff --git a/src/VirtoCommerce.Xapi.Core/Schemas/Facets/RangeFacetResultType.cs b/src/VirtoCommerce.Xapi.Core/Schemas/Facets/RangeFacetResultType.cs
index d5d74a8..3eb252a 100644
--- a/src/VirtoCommerce.Xapi.Core/Schemas/Facets/RangeFacetResultType.cs
+++ b/src/VirtoCommerce.Xapi.Core/Schemas/Facets/RangeFacetResultType.cs
@@ -11,12 +11,18 @@ public RangeFacetResultType()
Field(d => d.Name, nullable: false).Description("The key/name of the facet.");
Field(d => d.Label, nullable: false).Description("Localized name of the facet.");
+
Field>("FacetType")
.Description("The three types of facets. Terms, Range, Filter");
+
Field>>>("Ranges")
.Description("Ranges")
.Resolve(context => context.Source.Ranges);
+ Field("Statistics")
+ .Description("Statistics for the facet, such as min and max values across ranges.")
+ .Resolve(context => context.Source.Statistics);
+
IsTypeOf = obj => obj is RangeFacetResult;
Interface();
}
diff --git a/src/VirtoCommerce.Xapi.Core/Schemas/Facets/RangeFacetStatisticsType.cs b/src/VirtoCommerce.Xapi.Core/Schemas/Facets/RangeFacetStatisticsType.cs
new file mode 100644
index 0000000..d5cf7ba
--- /dev/null
+++ b/src/VirtoCommerce.Xapi.Core/Schemas/Facets/RangeFacetStatisticsType.cs
@@ -0,0 +1,15 @@
+using VirtoCommerce.Xapi.Core.Models.Facets;
+
+namespace VirtoCommerce.Xapi.Core.Schemas.Facets
+{
+ public class RangeFacetStatisticsType : ExtendableGraphType
+ {
+ public RangeFacetStatisticsType()
+ {
+ Name = "RangeFacetStatistics";
+
+ Field(d => d.Max, nullable: true).Description("The maximum value in the range or across ranges.");
+ Field(d => d.Min, nullable: true).Description("The minimum value in the range or across ranges.");
+ }
+ }
+}
diff --git a/src/VirtoCommerce.Xapi.Core/VirtoCommerce.Xapi.Core.csproj b/src/VirtoCommerce.Xapi.Core/VirtoCommerce.Xapi.Core.csproj
index 0eb6473..8d93a7e 100644
--- a/src/VirtoCommerce.Xapi.Core/VirtoCommerce.Xapi.Core.csproj
+++ b/src/VirtoCommerce.Xapi.Core/VirtoCommerce.Xapi.Core.csproj
@@ -29,7 +29,7 @@
-
+
diff --git a/src/VirtoCommerce.Xapi.Web/module.manifest b/src/VirtoCommerce.Xapi.Web/module.manifest
index 573f538..81dc36a 100644
--- a/src/VirtoCommerce.Xapi.Web/module.manifest
+++ b/src/VirtoCommerce.Xapi.Web/module.manifest
@@ -8,7 +8,7 @@
-
+