protected override DriverResult Display(TaxonomyPart part, string displayType, dynamic shapeHelper) { return(ContentShape("Parts_TaxonomyPart", () => { var taxonomyShape = shapeHelper.Taxonomy(ContentPart: part, ContentItem: part.ContentItem); var terms = _taxonomyService.GetTerms(part.ContentItem.Id); _taxonomyService.CreateHierarchy(terms, (parent, child) => { if (child.Shape == null) { child.Shape = shapeHelper.TaxonomyItem(Taxonomy: part.ContentItem, ContentPart: child.TermPart, ContentItem: child.TermPart.ContentItem); } // adding to root if (parent.TermPart == null) { taxonomyShape.Items.Add(child.Shape); } else { if (parent.Shape == null) { parent.Shape = shapeHelper.TaxonomyItem(Taxonomy: part.ContentItem, ContentPart: parent.TermPart, ContentItem: parent.TermPart.ContentItem); } parent.Shape.Items.Add(child.Shape); } }); return shapeHelper.Parts_TaxonomyPart(Taxonomy: taxonomyShape); })); }