diff --git a/.claude/settings.local.json b/.claude/settings.local.json index a019b102..fd77ad4b 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -81,7 +81,11 @@ "WebFetch(domain:fruitveb.hu)", "PowerShell(Get-Item \"H:\\\\Applications\\\\Aycode\\\\Source\\\\AyCode.Core\\\\AyCode.Services\\\\Nav\\\\docs\\\\eKAERManagementService_2.2.pdf\" | Select-Object Length, LastWriteTime, CreationTime; try { $r = Invoke-WebRequest -Uri \"https://ekaer.nav.gov.hu/faq/content/uploads/2025/05/eKAERManagementService_2.2.pdf\" -Method Head -UseBasicParsing; \"Online Content-Length: $\\($r.Headers['Content-Length']\\); Last-Modified: $\\($r.Headers['Last-Modified']\\)\" } catch { \"HEAD request failed: $\\($_.Exception.Message\\)\" })", "PowerShell($out = dotnet build \"H:\\\\Applications\\\\Mango\\\\Source\\\\NopCommerce.Common\\\\4.70\\\\Plugins\\\\Nop.Plugin.Misc.AIPlugin\\\\Nop.Plugin.Misc.FruitBankPlugin.csproj\" -v q --nologo 2>&1 | Out-String; $errLines = \\($out -split \"`n\"\\) | Where-Object { $_ -match \": error \" }; \"Osszes hiba-sor: $\\($errLines.Count\\)\"; $errLines | ForEach-Object { if \\($_ -match \"\\([A-Za-z]+\\\\.cs\\)\"\\) { $matches[1] } } | Group-Object | Sort-Object Count -Descending | Format-Table Name, Count -AutoSize)", - "PowerShell($out = dotnet build \"H:\\\\Applications\\\\Mango\\\\Source\\\\NopCommerce.Common\\\\4.70\\\\Plugins\\\\Nop.Plugin.Misc.AIPlugin\\\\Nop.Plugin.Misc.FruitBankPlugin.csproj\" -v q --nologo 2>&1 | Out-String; $errLines = \\($out -split \"`n\"\\) | Where-Object { $_ -match \": error \" }; \"Osszes hiba-sor: $\\($errLines.Count\\)\"; $errLines | Where-Object { $_ -match \"FruitBankDataController\" } | Select-Object -First 5)" + "PowerShell($out = dotnet build \"H:\\\\Applications\\\\Mango\\\\Source\\\\NopCommerce.Common\\\\4.70\\\\Plugins\\\\Nop.Plugin.Misc.AIPlugin\\\\Nop.Plugin.Misc.FruitBankPlugin.csproj\" -v q --nologo 2>&1 | Out-String; $errLines = \\($out -split \"`n\"\\) | Where-Object { $_ -match \": error \" }; \"Osszes hiba-sor: $\\($errLines.Count\\)\"; $errLines | Where-Object { $_ -match \"FruitBankDataController\" } | Select-Object -First 5)", + "PowerShell($xml = Get-ChildItem \"$env:USERPROFILE\\\\.nuget\\\\packages\\\\devexpress.blazor\" -Recurse -Filter \"DevExpress.Blazor.xml\" -ErrorAction SilentlyContinue | Select-Object -Last 1; if \\($xml\\) { $xml.FullName; Select-String -Path $xml.FullName -Pattern \"MessageBoxOptions\\\\.\\(BodyTemplate|CssClass|Text|Title\\)\" | Select-Object -First 8 | ForEach-Object { $_.Line.Trim\\(\\).Substring\\(0, [Math]::Min\\(120, $_.Line.Trim\\(\\).Length\\)\\) } } else { \"DevExpress.Blazor.xml nem talalhato a NuGet cache-ben\" })", + "PowerShell($lib = Get-ChildItem \"$env:USERPROFILE\\\\.nuget\\\\packages\\\\devexpress.blazor\" -Directory | Sort-Object Name | Select-Object -Last 1; \"Verzio: $\\($lib.Name\\)\"; $dll = Get-ChildItem $lib.FullName -Recurse -Filter \"DevExpress.Blazor.dll\" | Select-Object -First 1; $asm = [System.Reflection.Assembly]::LoadFile\\($dll.FullName\\); $t = $asm.GetType\\(\"DevExpress.Blazor.MessageBoxOptions\"\\); if \\($t\\) { $t.GetProperties\\(\\) | Select-Object -ExpandProperty Name } else { \"MessageBoxOptions tipus nem talalhato\" })", + "PowerShell($dll = Get-ChildItem \"$env:USERPROFILE\\\\.nuget\\\\packages\\\\devexpress.blazor\\\\25.1.5\" -Recurse -Filter \"DevExpress.Blazor.dll\" | Select-Object -First 1; $dll.FullName; $bytes = [System.IO.File]::ReadAllBytes\\($dll.FullName\\); $text = [System.Text.Encoding]::ASCII.GetString\\($bytes\\); @\\(\"BodyTemplate\",\"CssClass\",\"MessageBoxOptions\"\\) | ForEach-Object { \"$\\($_\\): $\\($text.Contains\\($_\\)\\)\" })", + "PowerShell($dll = \"C:\\\\Users\\\\Fullepi\\\\.nuget\\\\packages\\\\devexpress.blazor\\\\25.1.5\\\\lib\\\\net8.0\\\\DevExpress.Blazor.v25.1.dll\"; $bytes = [System.IO.File]::ReadAllBytes\\($dll\\); $text = [System.Text.Encoding]::ASCII.GetString\\($bytes\\); @\\(\"BodyTemplate\",\"get_CssClass\",\"MessageBoxOptions\",\"TitleTemplate\"\\) | ForEach-Object { \"$\\($_\\): $\\($text.Contains\\($_\\)\\)\" })" ] } } diff --git a/FruitBankHybrid.Shared/Components/Grids/Ekaers/GridEkaerHistory.razor b/FruitBankHybrid.Shared/Components/Grids/Ekaers/GridEkaerHistory.razor index 21496a74..6f015740 100644 --- a/FruitBankHybrid.Shared/Components/Grids/Ekaers/GridEkaerHistory.razor +++ b/FruitBankHybrid.Shared/Components/Grids/Ekaers/GridEkaerHistory.razor @@ -293,8 +293,9 @@ } // Az adathiány/formátumhiba miatt KIHAGYOTT jelöltek üzenetei popupban — ezeket javítani kell, mielőtt bekerülhetnek. + // A lista-overload üzenetenként külön sort ad (a Text-be fűzött sortöréseket a HTML elnyelné); a cím hozza a darabszámot. if (result?.Messages is { Count: > 0 } skipped) - await DialogService.ShowMessageBoxAsync("EKÁER — kihagyott tételek", string.Join(Environment.NewLine, skipped), MessageBoxRenderStyle.Warning); + await DialogService.ShowMessageBoxAsync($"EKÁER — kihagyott tételek ({skipped.Count})", skipped, MessageBoxRenderStyle.Warning); } private async Task OnDownloadClick(EkaerHistory ekaerHistory) diff --git a/FruitBankHybrid.Shared/Extensions/DevexpressComponentExtensions.cs b/FruitBankHybrid.Shared/Extensions/DevexpressComponentExtensions.cs index 6cca84f4..906d9a4b 100644 --- a/FruitBankHybrid.Shared/Extensions/DevexpressComponentExtensions.cs +++ b/FruitBankHybrid.Shared/Extensions/DevexpressComponentExtensions.cs @@ -12,6 +12,19 @@ public static class DevexpressComponentExtensions await messageBox.AlertAsync(messageBoxOptions); } + /// Több-üzenetes messagebox: minden üzenet KÜLÖN SORBAN jelenik meg. A sima Text-be fűzött + /// sortörések a HTML-renderelésnél szóközzé olvadnának — a CssClass + a white-space: pre-line + /// szabály (app.css: .fb-msgbox-multiline) tartja meg őket. (A MessageBoxOptions-nek nincs + /// BodyTemplate-je, ezért CSS-megoldás.) + public static async Task ShowMessageBoxAsync(this IDialogService messageBox, string title, IReadOnlyCollection lines, MessageBoxRenderStyle messageBoxRenderStyle) + { + // "• " prefix = lista-hatás (a MessageBoxOptions csak sima szöveget tud,