public async Task <IActionResult> BulkEdit(ContentRelationBulkAction bulkAction, PagerParameters pagerParameters)
        {
            // if (!await _authorizationService.AuthorizeAsync(User, Permissions.ManageWorkflows))
            // {
            // return Unauthorized();
            // }

            var viewModel = new ContentRelationIndexViewModel {
                ContentRelations = new List <ContentRelationEntry>(), Options = new ContentRelationIndexOptions()
            };

            if (!(await TryUpdateModelAsync(viewModel)))
            {
                return(View(viewModel));
            }

            var checkedEntries = viewModel.ContentRelations.Where(t => t.IsChecked);

            switch (bulkAction)
            {
            case ContentRelationBulkAction.None:
                break;

            case ContentRelationBulkAction.Delete:
                foreach (var entry in checkedEntries)
                {
                    var contentRelation = await _contentRelationRepository.GetAsync(entry.Id);

                    if (contentRelation != null)
                    {
                        await _contentRelationRepository.DeleteAsync(contentRelation);

                        _notifier.Success(H["Content Relation {0} has been deleted.", contentRelation.Name]);
                    }
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(RedirectToAction("Index", new { page = pagerParameters.Page, pageSize = pagerParameters.PageSize }));
        }
        public async Task <IActionResult> Index(ContentRelationIndexOptions options, PagerParameters pagerParameters)
        {
            // if (!await _authorizationService.AuthorizeAsync(User, Permissions.ManageWorkflows))
            // {
            // return Unauthorized();
            // }

            var siteSettings = await _siteService.GetSiteSettingsAsync();

            var pager = new Pager(pagerParameters, siteSettings.PageSize);

            if (options == null)
            {
                options = new ContentRelationIndexOptions();
            }

            var query = _session.Query <ContentRelationRecord, ContentRelationIndex>();

            switch (options.Filter)
            {
            case ContentRelationFilter.All:
            default:
                break;
            }

            if (!string.IsNullOrWhiteSpace(options.Search))
            {
                query = query.Where(w => w.Name.Contains(options.Search));
            }

            switch (options.Order)
            {
            case ContentRelationOrder.Name:
                query = query.OrderBy(u => u.Name);
                break;
            }

            var count = await query.CountAsync();

            var contentRelations = await query
                                   .Skip(pager.GetStartIndex())
                                   .Take(pager.PageSize)
                                   .ListAsync();

            // var workflowDefinitionIds = contentRelations.Select(x => x.Uid).ToList();
            //var workflowInstanceGroups = (await _session.QueryIndex<WorkflowInstanceIndex>(x => x.WorkflowDefinitionUid.IsIn(workflowDefinitionIds)).ListAsync()).GroupBy(x => x.WorkflowDefinitionUid).ToDictionary(x => x.Key);

            // Maintain previous route data when generating page links.
            var routeData = new RouteData();

            routeData.Values.Add("Options.Filter", options.Filter);
            routeData.Values.Add("Options.Search", options.Search);
            routeData.Values.Add("Options.Order", options.Order);

            var pagerShape = (await New.Pager(pager)).TotalItemCount(count).RouteData(routeData);
            var model      = new ContentRelationIndexViewModel
            {
                ContentRelations = contentRelations
                                   .Select(x => new ContentRelationEntry
                {
                    ContentRelation = x,
                    Id = x.Id,
                    // WorkflowInstanceCount = workflowInstanceGroups.ContainsKey(x.Uid) ? workflowInstanceGroups[x.Uid].Count() : 0,
                    Name = x.Name
                })
                                   .ToList(),
                Options = options,
                Pager   = pagerShape
            };

            return(View(model));
        }