Exemplo n.º 1
0
        /// <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()
                       ));
        }
Exemplo n.º 2
0
        public async Task <ActionResult> SuggestPagesForRelationSource([FromQuery] RelationSuggestQueryVM vm)
        {
            var pages = await _suggest.SuggestRelationPagesAsync(vm);

            return(Json(pages));
        }