public async Task <IViewComponentResult> InvokeAsync(PageComponentContext context) { ErpPage currentPage = null; try { #region << Init >> if (context.Node == null) { return(await Task.FromResult <IViewComponentResult>(Content("Error: The node Id is required to be set as query parameter 'nid', when requesting this component"))); } var pageFromModel = context.DataModel.GetProperty("Page"); if (pageFromModel == null) { return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel cannot be null"))); } else if (pageFromModel is ErpPage) { currentPage = (ErpPage)pageFromModel; } else { return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel does not have Page property or it is not from ErpPage Type"))); } var instanceOptions = new PcApplicationsOptions(); if (context.Options != null) { instanceOptions = JsonConvert.DeserializeObject <PcApplicationsOptions>(context.Options.ToString()); } var componentMeta = new PageComponentLibraryService().GetComponentMeta(context.Node.ComponentName); #endregion ViewBag.Options = instanceOptions; ViewBag.Node = context.Node; ViewBag.ComponentMeta = componentMeta; ViewBag.RequestContext = ErpRequestContext; ViewBag.AppContext = ErpAppContext.Current; ViewBag.ComponentContext = context; if (context.Mode != ComponentMode.Options && context.Mode != ComponentMode.Help) { var currentUser = AuthService.GetUser(HttpContext.User); var currentUserRoles = currentUser.Roles.Select(x => x.Id); var apps = new AppService().GetAllApplications().OrderBy(x => x.Weight).ToList(); var allowedApps = new List <App>(); if (apps != null) { foreach (var app in apps) { if (app.Access == null || app.Access.Count == 0) { continue; } IEnumerable <Guid> accessRoles = app.Access.Intersect(currentUserRoles); if (accessRoles.Any()) { allowedApps.Add(app); } } } //Generate Url foreach (var app in allowedApps) { app.HomePages = app.HomePages.FindAll(x => x.Weight < 1000).OrderBy(x => x.Weight).ToList(); foreach (var area in app.Sitemap.Areas) { foreach (var node in area.Nodes) { node.Url = PageUtils.GenerateSitemapNodeUrl(node, area, app); } } app.Sitemap = new AppService().OrderSitemap(app.Sitemap); } ViewBag.Apps = allowedApps; } switch (context.Mode) { case ComponentMode.Display: return(await Task.FromResult <IViewComponentResult>(View("Display"))); case ComponentMode.Design: return(await Task.FromResult <IViewComponentResult>(View("Design"))); case ComponentMode.Options: return(await Task.FromResult <IViewComponentResult>(View("Options"))); case ComponentMode.Help: return(await Task.FromResult <IViewComponentResult>(View("Help"))); default: ViewBag.Error = new ValidationException() { Message = "Unknown component mode" }; return(await Task.FromResult <IViewComponentResult>(View("Error"))); } } catch (ValidationException ex) { ViewBag.Error = ex; return(await Task.FromResult <IViewComponentResult>(View("Error"))); } catch (Exception ex) { ViewBag.Error = new ValidationException() { Message = ex.Message }; return(await Task.FromResult <IViewComponentResult>(View("Error"))); } }
public async Task <IViewComponentResult> InvokeAsync( ) { var currentNode = ErpRequestContext.SitemapNode; var currentArea = ErpRequestContext.SitemapArea; var nodesWithExistingGroups = new List <SitemapNode>(); var nodesWithoutExistingGroups = new List <SitemapNode>(); var existingGroupsHashset = new HashSet <string>(); var groupNameHashset = new HashSet <string>(); var groupWithNodesCount = 0; if (currentNode != null && currentArea != null) { foreach (var group in currentArea.Groups) { existingGroupsHashset.Add(group.Name); } foreach (var node in currentArea.Nodes) { //Exclude current node; //Boz-it is more convinient not to exclude it //if (node.Id == currentNode.Id) { // continue; //} //Generate the url for the node based on the route convention node.Url = PageUtils.GenerateSitemapNodeUrl(node, currentArea, ErpRequestContext.App); if (existingGroupsHashset.Contains(node.GroupName)) { nodesWithExistingGroups.Add(node); if (!groupNameHashset.Contains(node.GroupName)) { groupWithNodesCount++; groupNameHashset.Add(node.GroupName); } } else { nodesWithoutExistingGroups.Add(node); } } if (nodesWithExistingGroups.Count > 1) { nodesWithExistingGroups = nodesWithExistingGroups.OrderBy(x => x.Weight).ThenBy(x => x.Label).ToList(); } if (nodesWithoutExistingGroups.Count > 1) { nodesWithoutExistingGroups = nodesWithoutExistingGroups.OrderBy(x => x.Weight).ThenBy(x => x.Label).ToList(); } } //Render methods var ddRenderSpan = 3; var ddWidth = "45rem"; var columnsRendered = groupWithNodesCount + (nodesWithoutExistingGroups.Count > 0 ? 1 : 0); if (columnsRendered == 1) { ddRenderSpan = 12; ddWidth = "15rem"; } else if (columnsRendered == 2) { ddRenderSpan = 6; ddWidth = "25rem"; } else if (columnsRendered == 3) { ddRenderSpan = 4; ddWidth = "35rem"; } ViewBag.NodesWithExistingGroups = nodesWithExistingGroups; ViewBag.NodesWithoutExistingGroups = nodesWithoutExistingGroups; ViewBag.CurrentNode = currentNode; ViewBag.CurrentArea = currentArea; ViewBag.DDRenderSpan = ddRenderSpan; ViewBag.DDWidth = ddWidth; return(await Task.FromResult <IViewComponentResult>(View("NodeNav.Default"))); }