diff --git a/TeleBot/TeleBot/Handlers/CallbackHandler.cs b/TeleBot/TeleBot/Handlers/CallbackHandler.cs index 8c0e021..b3be7ab 100644 --- a/TeleBot/TeleBot/Handlers/CallbackHandler.cs +++ b/TeleBot/TeleBot/Handlers/CallbackHandler.cs @@ -1430,8 +1430,27 @@ namespace TeleBot.Handlers var product = await _shopService.GetProductAsync(productId.Value); if (product == null) return; - // For single item, replace selection - var selectedVariants = new List { variantName }; + // Get existing selections + var selectedVariants = session.TempData.ContainsKey("selected_variants") + ? session.TempData["selected_variants"] as List ?? new List() + : new List(); + + // Find the variant type for the selected variant + var selectedVariantObj = product.Variants?.FirstOrDefault(v => v.Name == variantName); + if (selectedVariantObj != null) + { + // Remove any previous selection from the same variant type + var variantsOfSameType = product.Variants + .Where(v => v.VariantType == selectedVariantObj.VariantType) + .Select(v => v.Name) + .ToList(); + + selectedVariants.RemoveAll(v => variantsOfSameType.Contains(v)); + + // Add the new selection + selectedVariants.Add(variantName); + } + session.TempData["selected_variants"] = selectedVariants; var quantity = session.TempData.ContainsKey("current_quantity")