public async Task <IActionResult> RemoveTagFromChooseDeck(ChooseDeckModel 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 = String.Empty; } return(View(nameof(ChooseDeck), await CreateChooseDeckModel(model))); }
private async Task <ChooseDeckModel> CreateChooseDeckModel(ChooseDeckModel model) { var userWithDecks = await _userManager.GetUserAsync(User); var decksInModel = _context.Decks .Where(deck => deck.CreatorId == userWithDecks.Id) .Include(deck => deck.Tags) .ToList(); if (model.SearchFilter is not null) { decksInModel = decksInModel .Where(deck => deck.Name .ToLower() .Contains(model.SearchFilter .ToLower())) .ToList(); } 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()) .ToList(); } model.Decks = decksInModel .Select(deck => new DeckModel { Id = deck.Id, Name = deck.Name }) .ToList(); model.TagFilter = String.Empty; model.UserName = userWithDecks.UserName; return(model); }
public async Task <IActionResult> ChooseDeck(ChooseDeckModel model) => View(await CreateChooseDeckModel(model));