示例#1
0
        private async Task <ContentTreeItem> BuildContentTree(ContentItem contentItem, string selectedContentItemId)
        {
            if (contentItem != null)
            {
                var childContentItems = await _listContainerService.GetChildContentItems(contentItem.ContentItemId, VersionOptions.Latest);

                var vm = new ContentTreeItem()
                {
                    Id = contentItem.ContentItemId, ContentItem = contentItem, Name = contentItem.DisplayText
                };
                vm.Href = await GetContentItemDisplayUrl(contentItem);

                vm.IsActive = !string.IsNullOrEmpty(selectedContentItemId) && selectedContentItemId == contentItem.ContentItemId;
                vm.ContentItemState.Selected = vm.IsActive;
                vm.ContentItemState.Expanded = vm.IsActive;
                if (childContentItems != null)
                {
                    foreach (var child in childContentItems)
                    {
                        await WalkTree(child, vm, selectedContentItemId);
                    }
                }

                return(vm);
            }

            return(null);
        }
示例#2
0
        public async Task <dynamic> DisplayAsync(ContentTreeItem tree, bool isRoot, string linksmode, bool showActionsMenu)
        {
            List <dynamic> children = new List <dynamic>();

            if (tree.Children.Count > 0)
            {
                foreach (var child in tree.Children)
                {
                    children.Add(await DisplayAsync(child, false, linksmode, showActionsMenu));
                }
            }

            dynamic treeNodeShape;

            if (isRoot) //IS ROOT
            // if (tree.ContentItem.ContentItemId == "4r7gn6nnc1bnw39tch07xxgcdx") //IS ROOT
            {
                treeNodeShape = await _shapeFactory.ListView_RootTreeItem(
                    Content : tree.ContentItem,
                    Title : $"{tree.Name}",
                    // Path: tree.Path,
                    //Level: tree.Level,
                    IsActive :  tree.IsActive,
                    LinksMode : linksmode
                    //  Editable: false
                    );

                if (showActionsMenu)
                {
                    treeNodeShape.Actions = await _shapeFactory.ListView_TreeItemActions(ContentItem : tree.ContentItem,
                                                                                         HasChildren : tree.Children.Count > 0);
                }
            }
            else
            {
                treeNodeShape = await _shapeFactory.ListView_TreeItem(
                    Content : tree.ContentItem,
                    Title : $"{tree.Name}",
//                    Title: String.Format("{0} ({1})", tree.Title, tree.ContentItem.ContentType),
                    // Path: tree.Path,
                    //Level: tree.Level,
                    IsActive : tree.IsActive,
                    LinksMode : linksmode
                    // Editable: _treePermissionProviders.All(p => p.Editable(tree.ContentItem).Result)
                    // Actions: await _shapeFactory.ListView_TreeItemActions(ContentItem: tree.ContentItem,
                    //     HasChildren: tree.Children.Count > 0)
                    );

                if (showActionsMenu)
                {
                    treeNodeShape.Actions = await _shapeFactory.ListView_TreeItemActions(ContentItem : tree.ContentItem,
                                                                                         HasChildren : tree.Children.Count > 0);
                }
            }

            // treeNodeShape.NoHide = treeNodeShape.Editable || children.Any(c => c.Editable || c.NoHide);
            treeNodeShape.Children = children;

            return(treeNodeShape);
        }
示例#3
0
        private async Task WalkTreeFromInMemoryCollection(ContentItem contentItem, ContentTreeItem vm, string selectedContentItemId, IEnumerable <ContentItem> inMemoryCollection)
        {
            //add root
            var node = new ContentTreeItem()
            {
                Id = contentItem.ContentItemId, ContentItem = contentItem, Name = contentItem.DisplayText
            };

            node.Href = await GetContentItemDisplayUrl(contentItem);

            node.IsActive = !string.IsNullOrEmpty(selectedContentItemId) && selectedContentItemId == contentItem.ContentItemId;
            node.ContentItemState.Selected = node.IsActive;
            node.ContentItemState.Expanded = node.IsActive;
            vm.Children.Add(node);
            var childContentItems = await _listContainerService.GetChildContentItems(contentItem.ContentItemId, VersionOptions.Latest);

            //  var childContentItems =  inMemoryCollection.Where(x=> x.l) (contentItem.ContentItemId, VersionOptions.Latest);
            if (childContentItems != null)
            {
                foreach (var childterm in childContentItems)
                {
                    await WalkTreeFromInMemoryCollection(childterm, node, selectedContentItemId, inMemoryCollection);
                }
            }
        }
示例#4
0
        public async Task <ContentTreeItem> BuildContentTreeForListableContentTypesAsync()
        {
            //1 .Get ContentTypes with ListPart
            var contentTreeItem = new ContentTreeItem();

            var listableContentTypeDefinitions = _contentDefinitionManager
                                                 .ListTypeDefinitions()
                                                 .Where(x =>
                                                        x.Parts.Any(p =>
                                                                    p.PartDefinition.Name == "ListPart"))
            ;

            var urlHelperFactory = _serviceProvider.GetRequiredService <IUrlHelperFactory>();

            _urlHelper = urlHelperFactory.GetUrlHelper(_actionContextAccessor.ActionContext);

            foreach (var listableContentTypeDefintion in listableContentTypeDefinitions)
            {
                //2 Get all content items for this content type (eg Policy content type => get all policies)
                //3 for each policy get children


                //add list content type definition
                var listContentTypeDefinition = new ContentTreeItem()
                {
                    Id          = listableContentTypeDefintion.Name,
                    ContentItem = null,
                    Name        = listableContentTypeDefintion.DisplayName
                };
                var listableContentItems = await(_session
                                                 .Query <ContentItem, ContentItemIndex>()
                                                 .Where(x => x.ContentType == listableContentTypeDefintion.Name && x.Published)
                                                 .ListAsync());

                foreach (var contentItem in listableContentItems)
                {
                    var vm = new ContentTreeItem()
                    {
                        Id = contentItem.ContentItemId, ContentItem = contentItem, Name = contentItem.DisplayText
                    };
                    vm.Href = await GetContentItemDisplayUrl(contentItem);

                    // vm.IsActive = !string.IsNullOrEmpty(selectedContentItemId) && selectedContentItemId == contentItem.ContentItemId;
                    vm.ContentItemState.Selected = vm.IsActive;
                    vm.ContentItemState.Expanded = vm.IsActive;


                    listContentTypeDefinition.Children.Add(vm);
                }

                contentTreeItem.Children.Add(listContentTypeDefinition);
            }

            return(contentTreeItem);
        }
示例#5
0
        public dynamic Display(ContentTreeItem tree)
        {
            List <dynamic> children = new List <dynamic>();

            if (tree.Children.Count > 0)
            {
                foreach (var child in tree.Children)
                {
                    children.Add(Display(child));
                }
            }

            dynamic shape;

            if (tree.Content == null)
            {
                shape = _shapeFactory.Parts_TreePlaceholder(
                    Title: String.Format("{0}*", tree.Title),
                    Path: tree.Path,
                    Level: tree.Level,
                    Editable: false
                    );
            }
            else
            {
                shape = _shapeFactory.Parts_TreeItem(
                    Content: tree.Content,
                    Title: String.Format("{0} ({1})", tree.Title, tree.Content.ContentItem.ContentType),
                    Path: tree.Path,
                    Level: tree.Level,
                    Editable: _treePermissionProviders.All(p => p.Editable(tree.Content)),
                    Actions: _shapeFactory.Parts_TreeItemActions(ContentPart: tree.Content, HasChildren: tree.Children.Count > 0)
                    );
            }

            shape.NoHide   = shape.Editable || children.Any(c => c.Editable || c.NoHide);
            shape.Children = children;

            return(shape);
        }
示例#6
0
        public void Discover(ShapeTableBuilder builder)
        {
            builder.Describe("TreeMap")

            .OnProcessing(async context =>
                          // .OnDisplaying(async context =>
            {
                dynamic shape = context.Shape;


                ContentTreeItem contentTree = shape.ContentTree;
                // string selectedContentItemId =shape.SelectedContentItemId.ToString();

                bool showActionsMenu = Convert.ToBoolean(shape.ShowActionsMenu);
                string linksmode     = Convert.ToString(shape.LinksMode);
                // bool showRootNode =  Convert.ToBoolean( shape.ShowRootNode);

                if (contentTree == null)
                {
                    return;
                }

                shape.Classes.Add("tree-map-content-item");

                // Menu population is executed when processing the shape so that its value
                // can be cached. IShapeDisplayEvents is called before the ShapeDescriptor
                // events and thus this code can be cached.

                var contentTreeService = context.ServiceProvider.GetRequiredService <IContentTreeService>();

                var treeMapShape = await contentTreeService.DisplayAsync(contentTree, true, linksmode, showActionsMenu);

                // Don't use Items.Add() or the collection won't be sorted
                //shape.TreeMapShape = treeMapShape;
                shape.Add(treeMapShape);
            });
        }