/// <summary> /// Suggests pages for the relations editor. /// </summary> public async Task <IReadOnlyList <PageTitleExtendedVM> > SuggestRelationPagesAsync(RelationSuggestQueryVM request) { if (request == null) { return(null); } var subRequest = new PickRequestVM <PageType> { Query = request.Query, Types = request.Types }; if (request.DestinationId == null && request.SourceId == null) { return(await SuggestPagesAsync(subRequest)); } var queryRoot = _db.Relations .Where(x => x.IsDeleted == false); var idQuery = request.DestinationId != null ? queryRoot.Where(x => x.DestinationId == request.DestinationId) .Select(x => x.SourceId) : queryRoot.Where(x => x.SourceId == request.SourceId) .Select(x => x.DestinationId); var existingIds = await idQuery.ToHashSetAsync(); var selfId = request.DestinationId ?? request.SourceId ?? Guid.Empty; existingIds.Add(selfId); return(await SuggestPagesAsync( new PickRequestVM <PageType> { Query = request.Query, Types = request.Types }, ids => ids.Where(id => !existingIds.Contains(id)).ToList() )); }
public async Task <ActionResult> SuggestPagesForRelationSource([FromQuery] RelationSuggestQueryVM vm) { var pages = await _suggest.SuggestRelationPagesAsync(vm); return(Json(pages)); }