public static IEnumerable <TChild> GetAllChildren <TChild>(this IContentLoader contentLoader, ContentReference contentReference) where TChild : IContent
        {
            var usedIds    = new HashSet <int>();
            var catalogRef = contentLoader.GetChildren <IContent>(contentReference).First();
            var nodeQueue  = new Queue <IContent>(new List <IContent>()
            {
                catalogRef
            });

            while (nodeQueue.Any())
            {
                var contentData = nodeQueue.Dequeue();

                if (!usedIds.Contains(contentData.ContentLink.ID))
                {
                    usedIds.Add(contentData.ContentLink.ID);

                    var children = contentLoader.LoadChildrenBatched <IContent>(contentData.ContentLink, ContentLanguage.PreferredCulture);
                    foreach (var child in children)
                    {
                        nodeQueue.Enqueue(child);
                    }

                    if (contentData is TChild content)
                    {
                        yield return(content);
                    }
                }
            }
        }