protected void BuildTreeNodes(List <FacetSetting> categoryFacetSettings, string nextFacetFieldName, IList <Facet> facets, SelectedFacets selectedFacets, List <CategoryFacetValuesTreeNode> nodes, Tree <Overture.ServiceModel.Products.Category, string> categoryTree, CategoryFacetCounts counts, CultureInfo culture) { if ((nodes?.Count ?? 0) == 0) { return; } var facetSetting = categoryFacetSettings.FirstOrDefault(c => c.DependsOn != null && c.DependsOn.Contains(nextFacetFieldName)); if (facetSetting != null) { foreach (var node in nodes) { if (!node.IsSelected) { continue; } categoryTree.TryGetValue(node.CategoryId, out TreeNode <Overture.ServiceModel.Products.Category> categoriesRoot); node.ChildNodes = GetTreeNodes(facetSetting, facets, selectedFacets, categoriesRoot, culture, counts); node.MaxCollapsedCount = facetSetting.MaxCollapsedValueCount; node.MaxExpandedCount = facetSetting.MaxExpendedValueCount; BuildTreeNodes(categoryFacetSettings, facetSetting.FieldName, facets, selectedFacets, node.ChildNodes, categoryTree, counts, culture); } } }
public CategoryFacetValuesTree BuildCategoryFacetValuesTree(IList <Facet> facets, SelectedFacets selectedFacets, Tree <Overture.ServiceModel.Products.Category, string> categoryTree, CategoryFacetCounts counts, CultureInfo culture) { var categoryFacetSettings = FacetConfigContext.GetFacetSettings() .Where(s => s.IsCategoryFacet)?.ToList(); if ((categoryFacetSettings?.Count ?? 0) == 0) { return(null); } categoryTree.TryGetValue("Root", out TreeNode <Overture.ServiceModel.Products.Category> categoriesRoot); var tree = new CategoryFacetValuesTree() { TotalCount = counts.TotalCount }; var rootFacetSetting = categoryFacetSettings.FirstOrDefault(c => (c.DependsOn?.Count ?? 0) == 0); if (rootFacetSetting != null) { tree.ChildNodes = GetTreeNodes(rootFacetSetting, facets, selectedFacets, categoriesRoot, culture, counts); tree.MaxCollapsedCount = rootFacetSetting.MaxCollapsedValueCount; tree.MaxExpandedCount = rootFacetSetting.MaxExpendedValueCount; BuildTreeNodes(categoryFacetSettings, rootFacetSetting.FieldName, facets, selectedFacets, tree.ChildNodes, categoryTree, counts, culture); } return(tree); }
protected List <CategoryFacetValuesTreeNode> GetTreeNodes(FacetSetting facetSetting, IList <Facet> facets, SelectedFacets selectedFacets, TreeNode <Overture.ServiceModel.Products.Category> categoryTree, CultureInfo culture, CategoryFacetCounts counts) { var categoryChildren = categoryTree.Children; var categoryChildrenLookup = categoryChildren.ToLookup(_ => _.Value.DisplayName.GetLocalizedValue(culture.Name)); var facet = facets.FirstOrDefault(f => f.FieldName == facetSetting.FieldName); var countsForFacetValues = counts?.Facets?.FirstOrDefault(fc => facetSetting.FieldName.StartsWith(fc.FieldName))?.FacetValues; List <CategoryFacetValuesTreeNode> nodes = null; var facetValues = facet?.FacetValues.Concat(facet.OnDemandFacetValues); if (facetValues != null) { nodes = (from fv in facetValues let category = categoryChildrenLookup[fv.Value].FirstOrDefault() where category != null let totalCount = countsForFacetValues?.FirstOrDefault(fcv => fcv.Value.Equals(category.Value.Id, StringComparison.OrdinalIgnoreCase))?.Quantity select new CategoryFacetValuesTreeNode(fv.Title, fv.Value, totalCount != null ? totalCount.Value : fv.Quantity, facetSetting.FacetType, facetSetting.FieldName, fv.IsSelected, fv.IsRemovable) { CategoryId = category.Value.Id }).ToList(); } if (nodes == null || nodes.Count == 0) { var selected = selectedFacets.Facets.Where(f => f.FieldName == facetSetting.FieldName); if (selected != null && selected.Count() > 0) { nodes = (from fv in selected let category = categoryChildrenLookup[fv.Value].FirstOrDefault() where category != null let totalCount = countsForFacetValues?.FirstOrDefault(fcv => fcv.Value.Equals(category.Value.Id, StringComparison.OrdinalIgnoreCase))?.Quantity select new CategoryFacetValuesTreeNode(fv.DisplayName, fv.Value, totalCount != null ? totalCount.Value : 0, facetSetting.FacetType, facetSetting.FieldName, true, fv.IsRemovable) { CategoryId = category.Value.Id }).ToList(); } } return(nodes?.OrderByDescending(n => n.Quantity).ToList()); }
protected virtual async Task <CategoryFacetValuesTree> BuildCategoryFacetValuesTree(IList <Facet> facets, SelectedFacets selectedFacets, CategoryFacetCounts categoryCounts) { var categories = await CategoryRepository.GetCategoriesTreeAsync(new GetCategoriesParam { Scope = ComposerContext.Scope }).ConfigureAwait(false); return(FacetFactory.BuildCategoryFacetValuesTree(facets, selectedFacets, categories, categoryCounts, ComposerContext.CultureInfo)); }