Skip to content

Commit

Permalink
Fix Taxonomy Editor
Browse files Browse the repository at this point in the history
Fix #17500
  • Loading branch information
MikeAlhayek committed Feb 20, 2025
1 parent 08b188e commit 0d29c89
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,17 @@ public override IDisplayResult Edit(TaxonomyField field, BuildFieldEditorContext
if (model.Taxonomy != null)
{
var termEntries = new List<TermEntry>();
TaxonomyFieldDriverHelper.PopulateTermEntries(termEntries, field, model.Taxonomy.As<TaxonomyPart>().Terms, 0);

var terms = model.Taxonomy.As<TaxonomyPart>().Terms;

// Keep the order as it is listed in the fields. Then the other content items
var sortedTerms = terms
.Where(x => field.TermContentItemIds.Contains(x.ContentItemId))
.OrderBy(x => Array.IndexOf(field.TermContentItemIds, x.ContentItemId))
.Concat(terms.Where(x => !field.TermContentItemIds.Contains(x.ContentItemId)))
.ToArray();

TaxonomyFieldDriverHelper.PopulateTermEntries(termEntries, field, sortedTerms, 0);

model.TermEntries = termEntries;
model.UniqueValue = termEntries.FirstOrDefault(x => x.Selected)?.ContentItemId;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,34 +13,29 @@ public static class TaxonomyFieldDriverHelper
/// </summary>
public static void PopulateTermEntries(List<TermEntry> termEntries, TaxonomyField field, IEnumerable<ContentItem> contentItems, int level)
{
foreach (var selectedTermContentItemId in field.TermContentItemIds)
foreach (var contentItem in contentItems)
{
if (contentItems.Any(x => x.ContentItemId == selectedTermContentItemId))
{
var contentItem = contentItems.First(x => x.ContentItemId == selectedTermContentItemId);

var children = Array.Empty<ContentItem>();
var children = Array.Empty<ContentItem>();

if (((JsonObject)contentItem.Content)["Terms"] is JsonArray termsArray)
{
children = termsArray.ToObject<ContentItem[]>();
}
if (((JsonObject)contentItem.Content)["Terms"] is JsonArray termsArray)
{
children = termsArray.ToObject<ContentItem[]>();
}

var termEntry = new TermEntry
{
Term = contentItem,
ContentItemId = contentItem.ContentItemId,
Selected = field.TermContentItemIds.Contains(contentItem.ContentItemId),
Level = level,
IsLeaf = children.Length == 0
};
var termEntry = new TermEntry
{
Term = contentItem,
ContentItemId = contentItem.ContentItemId,
Selected = field.TermContentItemIds.Contains(contentItem.ContentItemId),
Level = level,
IsLeaf = children.Length == 0
};

termEntries.Add(termEntry);
termEntries.Add(termEntry);

if (children.Length > 0)
{
PopulateTermEntries(termEntries, field, children, level + 1);
}
if (children.Length > 0)
{
PopulateTermEntries(termEntries, field, children, level + 1);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,17 @@ public override IDisplayResult Edit(TaxonomyField field, BuildFieldEditorContext
if (model.Taxonomy != null)
{
var termEntries = new List<TermEntry>();
TaxonomyFieldDriverHelper.PopulateTermEntries(termEntries, field, model.Taxonomy.As<TaxonomyPart>().Terms, 0);

var terms = model.Taxonomy.As<TaxonomyPart>().Terms;

// Keep the order as it is listed in the fields. Then the other content items
var sortedTerms = terms
.Where(x => field.TermContentItemIds.Contains(x.ContentItemId))
.OrderBy(x => Array.IndexOf(field.TermContentItemIds, x.ContentItemId))
.Concat(terms.Where(x => !field.TermContentItemIds.Contains(x.ContentItemId)))
.ToArray();

TaxonomyFieldDriverHelper.PopulateTermEntries(termEntries, field, sortedTerms, 0);
var tagTermEntries = termEntries.Select(te => new TagTermEntry
{
ContentItemId = te.ContentItemId,
Expand Down

0 comments on commit 0d29c89

Please sign in to comment.