Resolve all 46 low-severity architecture review findings
This commit is contained in:
@@ -96,12 +96,47 @@
|
||||
private HashSet<string>? _filterRevealed;
|
||||
private Func<TemplateTreeNode, bool>? _initiallyExpanded;
|
||||
|
||||
// Compare immutable value snapshots, rather than entity/list reference identity:
|
||||
// callers may rename, move, or edit composition children in place.
|
||||
private sealed record TreeInput(string Kind, int Id, int? ParentId, string Name, bool Derived = false, bool Inherited = false, string? KeyOverride = null);
|
||||
private List<TreeInput>? _treeInputs;
|
||||
private Dictionary<int, IReadOnlyList<TemplateTreeNode>> _extraChildren = new();
|
||||
|
||||
protected override void OnParametersSet()
|
||||
{
|
||||
BuildTree();
|
||||
var inputs = new List<TreeInput>();
|
||||
foreach (var folder in Folders)
|
||||
inputs.Add(new("folder", folder.Id, folder.ParentFolderId, folder.Name));
|
||||
_extraChildren = new();
|
||||
foreach (var template in Templates)
|
||||
{
|
||||
inputs.Add(new("template", template.Id, template.FolderId, template.Name, template.IsDerived));
|
||||
if (!template.IsDerived && ExtraTemplateChildren is not null)
|
||||
{
|
||||
var children = ExtraTemplateChildren(template);
|
||||
_extraChildren[template.Id] = children;
|
||||
CaptureChildren(children, inputs);
|
||||
}
|
||||
}
|
||||
if (_treeInputs is null || !inputs.SequenceEqual(_treeInputs))
|
||||
{
|
||||
_treeInputs = inputs;
|
||||
BuildTree();
|
||||
}
|
||||
// Filter and RevealKeys are independent and may also be changed in place.
|
||||
ApplyFilter();
|
||||
}
|
||||
|
||||
private static void CaptureChildren(IReadOnlyList<TemplateTreeNode> children, List<TreeInput> inputs)
|
||||
{
|
||||
foreach (var child in children)
|
||||
{
|
||||
inputs.Add(new(child.Kind.ToString(), child.Id, null, child.Name, Inherited: child.IsInherited, KeyOverride: child.KeyOverride));
|
||||
CaptureChildren(child.Children, inputs);
|
||||
inputs.Add(new("end", 0, null, ""));
|
||||
}
|
||||
}
|
||||
|
||||
private void BuildTree()
|
||||
{
|
||||
var folderNodes = Folders.ToDictionary(
|
||||
@@ -136,7 +171,7 @@
|
||||
|
||||
if (ExtraTemplateChildren != null)
|
||||
{
|
||||
foreach (var extra in ExtraTemplateChildren(t))
|
||||
foreach (var extra in _extraChildren[t.Id])
|
||||
{
|
||||
tNode.Children.Add(extra);
|
||||
}
|
||||
@@ -231,6 +266,8 @@
|
||||
Kind = node.Kind,
|
||||
Id = node.Id,
|
||||
Name = node.Name,
|
||||
IsInherited = node.IsInherited,
|
||||
KeyOverride = node.KeyOverride,
|
||||
};
|
||||
foreach (var k in keptChildren) clone.Children.Add(k);
|
||||
if (keptChildren.Count > 0)
|
||||
|
||||
Reference in New Issue
Block a user