public override IDisplayResult Edit(LinkAdminNode treeNode) { return(Initialize <LinkAdminNodeViewModel>("LinkAdminNode_Fields_TreeEdit", async model => { model.LinkText = treeNode.LinkText; model.LinkUrl = treeNode.LinkUrl; model.IconClass = treeNode.IconClass; var permissions = await _adminMenuPermissionService.GetPermissionsAsync(); var selectedPermissions = permissions.Where(p => treeNode.PermissionNames.Contains(p.Name)); model.SelectedItems = selectedPermissions .Select(p => new PermissionViewModel { Name = p.Name, DisplayText = p.Description }).ToList(); model.AllItems = permissions .Select(p => new PermissionViewModel { Name = p.Name, DisplayText = p.Description }).ToList(); }).Location("Content")); }
public Task BuildNavigationAsync(MenuItem menuItem, NavigationBuilder builder, IEnumerable <IAdminNodeNavigationBuilder> treeNodeBuilders) { var node = menuItem as LinkAdminNode; if (node == null || String.IsNullOrEmpty(node.LinkText) || !node.Enabled) { return(Task.CompletedTask); } return(builder.AddAsync(new LocalizedString(node.LinkText, node.LinkText), async itemBuilder => { // Add the actual link itemBuilder.Url(node.LinkUrl); itemBuilder.Priority(node.Priority); itemBuilder.Position(node.Position); if (node.PermissionNames.Any()) { var permissions = await _adminMenuPermissionService.GetPermissionsAsync(); // Find the actual permissions and apply them to the menu. var selectedPermissions = permissions.Where(p => node.PermissionNames.Contains(p.Name)); itemBuilder.Permissions(selectedPermissions); } // Add adminNode's IconClass property values to menuItem.Classes. // Add them with a prefix so that later the shape template can extract them to use them on a <i> tag. node.IconClass?.Split(' ').ToList().ForEach(c => itemBuilder.AddClass("icon-class-" + c)); // Let children build themselves inside this MenuItem // todo: this logic can be shared by all TreeNodeNavigationBuilders foreach (var childTreeNode in menuItem.Items) { try { var treeBuilder = treeNodeBuilders.FirstOrDefault(x => x.Name == childTreeNode.GetType().Name); await treeBuilder.BuildNavigationAsync(childTreeNode, itemBuilder, treeNodeBuilders); } catch (Exception e) { _logger.LogError(e, "An exception occurred while building the '{MenuItem}' child Menu Item.", childTreeNode.GetType().Name); } } })); }