示例#1
0
            static void SortGroup(CrawledIssueGroup group, IEnumerable <IssueGroupSort> sorts)
            {
                var childrenAsGroups = group.Children.Where(c => c.IsGroup)
                                       .Select(c => c.ToGroup())
                                       .Sort(sorts)
                                       .ToArray();

                for (var i = 0; i < childrenAsGroups.Length; i++)
                {
                    group.Children[i] = childrenAsGroups[i];
                    SortGroup(childrenAsGroups[i], sorts);
                }
            }
示例#2
0
            static string[] CombineKeys(CrawledIssueGroup parent, string key)
            {
                if (parent is null)
                {
                    return new[] { key }
                }
                ;

                var result = new string[parent.Keys.Length + 1];

                Array.Copy(parent.Keys, result, parent.Keys.Length);
                result[parent.Keys.Length] = key;
                return(result);
            }
示例#3
0
            static void GroupNext(CrawledIssueOrGroup[] current, CrawledIssueGroupKey[] fields, int fieldIndex)
            {
                if (fieldIndex >= fields.Length)
                {
                    return;
                }

                var field = fields[fieldIndex];

                for (var i = 0; i < current.Length; i++)
                {
                    var oldGroup    = current[i].ToGroup();
                    var oldChildren = oldGroup.Children.Select(c => c.ToIssue());
                    var newChildren = GroupFirst(oldGroup, oldChildren, field);
                    var newGroup    = new CrawledIssueGroup(oldGroup.Keys, newChildren);
                    current[i] = newGroup;

                    GroupNext(newGroup.Children, fields, fieldIndex + 1);
                }
            }
示例#4
0
 static CrawledIssueOrGroup[] GroupFirst(CrawledIssueGroup parent, IEnumerable <CrawledIssue> issues, CrawledIssueGroupKey key)
 {
     return(key.Apply(issues)
            .Select(g => (CrawledIssueOrGroup) new CrawledIssueGroup(CombineKeys(parent, g.Key), g.Select(i => (CrawledIssueOrGroup)i).ToArray()))
            .ToArray());
 }
示例#5
0
 public virtual void Collapse(CrawledIssueGroup group)
 {
 }
示例#6
0
 public virtual void Expand(CrawledIssueGroup group)
 {
 }
示例#7
0
 public virtual bool IsExpanded(CrawledIssueGroup group) => false;
 public override void Collapse(CrawledIssueGroup group)
 {
     _expandedGroups.Remove(group);
     UpdateCounts();
 }
 public override void Expand(CrawledIssueGroup group)
 {
     _expandedGroups.Add(group);
     UpdateCounts();
 }
 public override bool IsExpanded(CrawledIssueGroup group) => _expandedGroups.Contains(group);
                static void Walk(List <CrawledIssueOrGroup> result, HashSet <CrawledIssueGroup> expandedGroups, CrawledIssueGroup parent, CrawledIssueOrGroup item, ref int itemsToSkip)
                {
                    if (result.Count == ItemsPerPage)
                    {
                        return;
                    }

                    if (itemsToSkip > 0)
                    {
                        itemsToSkip--;
                    }
                    else
                    {
                        // If this is the first item, ensure we add the group header
                        if (result.Count == 0 && item.IsIssue && parent != null)
                        {
                            result.Add(parent);
                        }

                        result.Add(item);
                    }

                    if (item.IsGroup)
                    {
                        var group = item.ToGroup();

                        if (expandedGroups.Contains(group))
                        {
                            foreach (var child in group.Children)
                            {
                                Walk(result, expandedGroups, group, child, ref itemsToSkip);
                            }
                        }
                    }
                }
示例#12
0
 public CrawledIssueOrGroup(CrawledIssueGroup group)
 {
     _value = group;
 }