/// <summary> /// Build the product block view model /// </summary> /// <param name="blockModel">The current product block</param> /// <returns>Return the product block view model</returns> public virtual ProductBlockViewModel Build(BlockModel blockModel) { var data = blockModel.MapTo <ProductBlockViewModelData>(); var viewModel = new ProductBlockViewModel(); var channel = _requestModelAccessor.RequestModel.ChannelModel.Channel; if (data != null) { viewModel.FooterLinkText = data.LinkText; if (data.LinkToCategorySystemId != Guid.Empty) { viewModel.FooterLinkUrl = data.LinkToCategorySystemId.MapTo <Category>().GetUrl(_requestModelAccessor.RequestModel.ChannelModel.SystemId, true); } else if (!string.IsNullOrEmpty(data.LinkToPage.Href)) { viewModel.FooterLinkUrl = data.LinkToPage.Href; } viewModel.Title = data.Title; var products = new List <ProductModel>(); if (data.SectionProductsType == BlockProductsType.Products) { products.AddRange(data.ProductSystemIds.Select(x => _productModelBuilder.BuildFromVariant(_variantService.Get(x)) ?? _productModelBuilder.BuildFromBaseProduct(_baseProductService.Get(x), channel)).Where(x => x != null)); } else { var searchQuery = new SearchQuery { PageSize = data.NumberOfProducts }; switch (data.SectionProductsType) { case BlockProductsType.Category: searchQuery.CategoryShowRecursively = true; searchQuery.SortBy = data.ProductSorting; searchQuery.CategorySystemId = data.CategorySystemId; break; case BlockProductsType.ProductList: searchQuery.ProductListSystemId = data.ProductListSystemId; break; } var response = _productSearchService.Search(searchQuery); if (response?.Hits != null) { products.AddRange(_productSearchService .Transform(searchQuery, response) .Items .Value .OfType <ProductSearchResult>() .Select(x => x.Item)); } } viewModel.Products = products.Select(x => _productItemViewModelBuilder.Build(x)).ToList(); } return(viewModel); }
private async Task BuildProductsAsync(SearchResultViewModel searchResult, SearchQuery searchQuery) { if (searchQuery.PageSize == null) { var pageSize = _requestModelAccessor.RequestModel.WebsiteModel.GetValue <int?>(AcceleratorWebsiteFieldNameConstants.ProductsPerPage) ?? DefaultWebsiteFieldValueConstants.ProductsPerPage; searchQuery.PageSize = pageSize; } var searchResults = await _productSearchService.SearchAsync(searchQuery, searchQuery.Tags, true, true, true); if (searchResults == null) { searchResult.Pagination = new PaginationViewModel(0, 1); return; } searchResult.Products = searchResults.Items.Value.Cast <ProductSearchResult>().Select(c => _productItemBuilder.Build(c.Item)).ToList(); searchResult.Pagination = new PaginationViewModel(searchResults.Total, searchQuery.PageNumber, searchResults.PageSize); }
public virtual BrandViewModel Build(PageModel pageModel) { var model = pageModel.MapTo <BrandViewModel>(); var pageSize = _requestModelAccessor.RequestModel.WebsiteModel.Fields.GetValue <int?>(AcceleratorWebsiteFieldNameConstants.ProductsPerPage) ?? DefaultWebsiteFieldValueConstants.ProductsPerPage; var searchQuery = _requestModelAccessor.RequestModel.SearchQuery.Clone(); searchQuery.CategoryShowRecursively = true; searchQuery.PageSize = pageSize; var navigationType = _requestModelAccessor.RequestModel.WebsiteModel.GetNavigationType(); var showBlocks = model.Blocks.Any() && !searchQuery.ContainsFilter(); model.ContainsFilter = searchQuery.ContainsFilter(); model.ShowFilterHeader = navigationType == NavigationType.Filter && searchQuery.ContainsFilter(); model.ShowRegularHeader = navigationType == NavigationType.Filter ? !model.Blocks.Any() && !searchQuery.ContainsFilter() : !showBlocks; var searchResponse = _productSearchService.Search(searchQuery, searchQuery.Tags, true, true, true); var searchResults = searchResponse != null?_productSearchService.Transform(searchQuery, searchResponse) : null; if (searchResults == null) { return(model); } model.Products = searchResults.Items.Value.Cast <ProductSearchResult>().Select(c => _productItemViewModelBuilder.Build(c.Item)).ToList(); model.Pagination = new PaginationViewModel(searchResults.Total, searchQuery.PageNumber, searchResults.PageSize); return(model); }
private void BuildProducts(SearchResultViewModel searchResult, SearchQuery searchQuery) { if (searchQuery.PageSize == null) { var pageSize = _requestModelAccessor.RequestModel.WebsiteModel.Fields.GetValue <int?>(AcceleratorWebsiteFieldNameConstants.ProductsPerPage) ?? DefaultWebsiteFieldValueConstants.ProductsPerPage; searchQuery.PageSize = pageSize; } var searchResponse = _productSearchService.Search(searchQuery, searchQuery.Tags, true, true, true); var searchResults = searchResponse == null ? null : _productSearchService.Transform(searchQuery, searchResponse); if (searchResults != null) { searchResult.Products = searchResults.Items.Value.Cast <ProductSearchResult>().Select(c => _productItemBuilder.Build(c.Item)).ToList(); searchResult.Pagination = new PaginationViewModel(searchResults.Total, searchQuery.PageNumber, searchResults.PageSize); } }