public async Task <IActionResult> RemoveTagFromSearched(SearchedDecksModel model) { model.FilterTags = model.FilterTagsString .Split("#", StringSplitOptions.RemoveEmptyEntries) .ToList(); model.FilterTags.Remove(model.TagToRemove); model.TagFilter = String.Empty; if (model.FilterTags.Any()) { model.FilterTagsString = model.FilterTags.Aggregate((x, y) => "#" + x + "#" + y + "#"); if (!model.FilterTagsString.EndsWith('#')) { model.FilterTagsString += "#"; } } else { model.FilterTagsString = "#"; } return(View(nameof(SearchedDecks), await CreateSearchedDecks(model))); }
private async Task <SearchedDecksModel> CreateSearchedDecks(SearchedDecksModel model) { var decks = await _context.Decks .Where(deck => deck.IsPublic) .Include(deck => deck.Tags) .ToListAsync(); var decksInModel = decks.Select(deck => deck); if (model.SearchValue is not null) { decksInModel = decksInModel .Where(deck => deck.Name .ToLower() .Contains(model.SearchValue .ToLower())); } if (!String.IsNullOrEmpty(model.TagFilter)) { if (model.FilterTagsString is null) { model.FilterTagsString = "#"; } if (!model.FilterTagsString.Contains($"#{model.TagFilter}#")) { model.FilterTagsString += $"{model.TagFilter.ToLower().Split(' ').Aggregate((x, y) => x += "_" + y)}#"; } } if (!String.IsNullOrEmpty(model.FilterTagsString)) { model.FilterTags = model.FilterTagsString .Split("#", StringSplitOptions.RemoveEmptyEntries) .ToList(); decksInModel = decksInModel .Where(deck => !model.FilterTags .Except(deck.Tags is null ? new List <string>() : deck.Tags.Select(tag => tag.Name)) .Any()); } model.Decks = decksInModel .Select(deck => new DeckModel { Id = deck.Id, Name = deck.Name, Difficulty = deck.Difficulty, }) .ToList(); var user = await _userManager.GetUserAsync(User); model.Username = user is null ? "" : user.UserName; model.TagFilter = String.Empty; return(model); }
public async Task <IActionResult> SearchedDecks(SearchedDecksModel model) => View(await CreateSearchedDecks(model));